neo4j

时间:2015-05-07 08:12:33

标签: recursion neo4j

我正在尝试在消息图中跟踪消息。例如,节点A向节点B发送消息,节点B向节点C发送消息(依此类推),如何在Cypher中设计一个查询,该查询将保持调用下一个节点直到到达终端节点。

A - > B - > C - > D - > E - > ˚F

开始搜索是A,返回一个包含B,C,D,E,F的列表(在经典的neo4j图形可视化中,这些节点是连接的,因为B向C发送消息,依此类推至F.

我的代码是

MATCH p=(a { address: "A" })-[r]->(b)
RETURN *

这只返回A和节点A发送的消息。如何修改它以完成我正在寻找的递归调用。

注意:我已经提到了this帖子并浏览了neo4j手册。但是,我仍然没有得到它(或者找不到答案,或者我可能没有得到它#39;)。任何帮助真的很感激!

1 个答案:

答案 0 :(得分:1)

这个电话:

MATCH p=(a { address: "A" })-[r*]->(b)
RETURN b;

将根据您的需要与A匹配尽可能多的跃点,因为关系上有星号。 b变量最终将成为a下游的所有内容。

我不确定你的意思是“调用下一个节点”。这将只返回该节点后面的数据。你实际上并不需要使用cypher和neo4j来进行递归。相反,你应该只问cypher你想要什么数据,它会为你得到它。如果你在非图形数据库上实现这些东西,你可以使用递归作为深度优先或广度优先搜索的一部分,但它对于图形数据库来说根本不是必需的。查询语言为您处理所有这些。