2

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

就像从第一层的一个位置找到最近的位置,然后是第二层等等。所有位置都使用路径“road_to”附加。

我有密码查询要查找但

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

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

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

任何帮助将不胜感激。Thanx

4

1 回答 1

1

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

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

请注意,我删除了支持with的START子句。不过它们基本上是一样的。这里操作符匹配关系的 1 到 3 跳。将您喜欢的任何限制放在那里,并在“变量关系”小节中阅读有关此方法的更多信息。MATCHWHERE id(n)=2[:road_to*1..3]:road_to

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

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

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

可以在此处找到有关 shortestPath 的更多信息。

于 2014-12-22T13:25:23.547 回答