遍历路径密码查询

时间:2014-12-22 10:16:08

标签: neo4j cypher neo4jphp

我在我的php应用程序中使用neo4j的rest api,我的要求是从一个节点找到相关的最近节点说" 2"并且需要查找的节点使用关系" road_to"。

它就像从第一级的一个位置找到最近的位置,然后是两个,依此类推。所有位置都使用路径" road_to&#34 ;.

我有cypher查询,但

1)它重复给出了我不需要的节点。

2)我需要限制节点需要显示的程度,这里在查询中我必须一次又一次地给() - [:road_to] - >()我需要给出一些限制水平

start n=node(2) Match (n)-[r:road_to]->()-[:road_to]->()-[:road_to]->(foaf) return r,foaf,n

任何帮助都将不胜感激.Thanx

1 个答案:

答案 0 :(得分:1)

因此,折叠多跳的最简单方法是使用有限的可变长度路径,如下所示:

MATCH (n)-[:road_to*1..3]-(foaf)
WHERE id(n)=2
RETURN n, foaf;

请注意,我删除了START条款,并使用MATCH支持WHERE id(n)=2。但它们基本相同。这里,运算符[:road_to*1..3]匹配:road_to关系的1到3个跃点。在那里放置你喜欢的限制,并在"变量关系"中阅读更多关于这种方法的here。小节。

如果您想找到符合某些条件的SHORTEST链接,那么您可以这样做:

MATCH (n), (foaf),
  p = shortestPath((n)-[:road_to*..15]-(foaf))
WHERE id(n) = 2 AND foaf.someProperty=someValue
RETURN p

在这里,我们将路径绑定到p,因此如果您想要该路径中的各个关系,您可以使用其他cypher函数获取它们。另请注意,我正在寻找特定的foaf,而不仅仅是任何:road_to。通常,当您正在寻找最短路径时,您正在寻找特定节点的路径。如果你有许多节点由{{1}}链接,那么没有这个额外的标准,你只需要一跳。

有关shortestPath can be found here的更多信息。