一组节点之间的所有最短路径
考虑任意数量的节点,A,B,C,D,E,F,…..
我希望返回这些节点之间所有最短路径。节点之间可能有许多边,但预期最多有 4 条。图是复杂的且非层级的(如果这有意义的话 - 任何节点都可以指向任何其他节点)。典型节点的格式为:match (n:Entity { name: 'xyz' })
我如何编写匹配表达式来返回上述节点之间的最短路径,而不分特定顺序?
解决方案
-
使用索引查找操作查找节点集
-
将它们收集到列表中
-
将列表两次解构 (Unwind),路径的每一边一次
-
通过 ID 比较移除反向对
-
匹配并返回路径
MATCH (n:Entity) where n.name IN {names}
WITH collect(n) as nodes
UNWIND nodes as n
UNWIND nodes as m
WITH * WHERE id(n) < id(m)
MATCH path = allShortestPaths( (n)-[*..4]-(m) )
RETURN path
此页面有帮助吗?