一组节点间的所有最短路径
考虑若干任意节点,A、B、C、D、E、F,……
我希望返回这些节点之间的所有最短路径。这些节点之间可能存在多条边,但最多不超过 4 条。该图结构复杂且非层次化(如果这样描述合理的话——任何节点都可能指向其他任意节点)。典型节点的形式为:match (n:Entity { name: 'xyz' })
我该如何编写 match 表达式,以在不指定顺序的情况下返回上述节点之间的最短路径?
解决方案
-
使用索引查找操作找到节点集合
-
将它们收集到列表中
-
将列表展开两次,每次对应路径的一侧
-
通过 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
此页面有帮助吗?