我在neo4j中有一个图表,对于给定的节点N,我想找到在不超过N步长的路径中可到达的所有节点,以及该组节点之间的所有链接。对于Cypher或Traversal框架来说,这似乎是可能的;比另一个更受欢迎?我是用Java从嵌入式数据库做的,我需要对子图进行进一步的查询。我已经四处寻找并没有找到任何确凿的答案。
答案 0 :(得分:2)
我认为cypher是获取所需数据,查询可变长度路径,收集和提炼的最简洁方法:
如果n是您的节点N
的内部ID,而您的P
是5:
START begin = node(n) // or e.g. index lookup
MATCH p = (begin)<-[r*..5]-(end) // match all paths of length up to 5
WITH distinct nodes(p) as nodes // collect the nodes contained in the paths
MATCH (x)<-[r]-(y) // find all relationships between nodes
WHERE x in nodes and y in nodes // which were found earlier
RETURN distinct x,r,y // and deduplicate as you find all pairs twice
这可能不是最有效的方式,但至少http://console.neo4j.org/中的执行计划说明表明在y in nodes
之前考虑了MATCH (x)-[r]-(y)
。
我想不出办法避免两次关系匹配,因此返回语句中的distinct
。