我在我的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
答案 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的更多信息。