【发布时间】:2015-10-14 09:13:24
【问题描述】:
我正在尝试制定一个密码查询来确定一组节点之间的最短路径,例如如下标识的集合,
MATCH (u:User) WITH u ORDER by u.score DESC LIMIT 10 RETURN u
假设表格的图形
(:User)-[:Owns]-(:Box)
第一个限制是我只想返回匹配第一个查询的用户之间的路径。
第二个限制是我不想在用户集中只有一个用户的链接包含 Box 元素。我只对拥有该盒子的匹配用户不止一个的盒子元素感兴趣。可能有其他未选择的用户链接到 Box,但我对他们不感兴趣。
在某种意义上,在我看来,我正在寻求提取链接匹配用户集的所有节点/路径的子网,但我是 Cypher/Neo4j 的新手,无法解决这个问题。
感谢您的指点。
【问题讨论】:
-
你是说你想要前 10 名用户的每个排列的最短路径的结果吗?
-
是的。我已经通过以下形式的查询解决了这个问题:“WITH u ORDER BY u.score DESC LIMIT 10 MATCH u-[r]->(c:Box) WITH u,c,r, count(r) as rc WHERE rc > 1 RETURN u,r,c",换句话说,试图仅包含链接到多个用户的框,但这当然包括链接到不在我选择中的用户的框。然后我想到了 shortestPath,但请注意,这只能应用于两个已识别的节点。所以是的,我实际上是在寻求确定每个选定用户之间的最短路径,尽管这让我觉得这可能是一种低效的方式来解决它?
-
我也尝试过 MATCH p=(u)-[:Owns]-(m), m-[]-(:User) 类型的结构,但我所做的尝试包括 Box 节点仅链接到我的用户选择集之一。这本质上是我的问题。如何确定 Box 集的范围。我显然错过了一些东西:)