如何在Neo4j中通过另一个节点递归获取间接关系?

问题描述

我有一个要求,我需要在其中递归遍历图,以通过中间Connection节点映射出连接。

例如考虑电影图。如果两个人一起拍电影,可以认为他们是彼此认识的。 有了这种间接关系,我想画出一个人不同阶层的所有联系。

MATCH (p1:Person {name:'Tom Hanks'})-->(m:Movie)<--(p2:Person) RETURN p1,p2,apoc.create.vRelationship(p1,'KNowS',{movie:m.title},p2)

有了这个,我可以得到第一层的连接,但是我需要递归地做到这一点。

如果关系“ KNowS”是真实的关系,我可以参加

MATCH (p1:Person {name:'Tom Hanks'})-[rel:KNowS*]->(p2:Person) RETURN p1,rel

但是根据我的阅读和尝试,我无法针对虚拟关系进行此操作。 有什么我可以做得到的吗?

解决方法

请注意,据我所知,“虚拟”关系并未涉及其中,我想您是说可变/未指定的关系?

可以从Tom Hanks返回正确的路径中的任何长度路径,只需放置关系类型即可;如果放置,则搜索是无方向的路径,沿这样的任何方向。我认为这不是您想要的,如果放任不管,它将返回整个图

match p=(p1:Person {name:'Tom Hanks'})-[*]-()
return p
LIMIT 10

注意:为了安全起见,我添加了LIMIT 10,这是一个好习惯,至少要等到您确定查询能够满足您的要求为止。

您能举一个您希望看到的查询结果的例子吗?您想递归到多深(您可以指定深度,例如* .. 2),并通过每种关系类型进行递归?