知识库

一组节点间的所有最短路径

考虑若干任意节点,A、B、C、D、E、F,……

我希望返回这些节点之间的所有最短路径。这些节点之间可能存在多条边,但最多不超过 4 条。该图结构复杂且非层次化(如果这样描述合理的话——任何节点都可能指向其他任意节点)。典型节点的形式为:match (n:Entity { name: 'xyz' })

我该如何编写 match 表达式,以在不指定顺序的情况下返回上述节点之间的最短路径?

解决方案

  1. 使用索引查找操作找到节点集合

  2. 将它们收集到列表中

  3. 将列表展开两次,每次对应路径的一侧

  4. 通过 ID 比较移除逆向对

  5. 匹配并返回路径

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
© . This site is unofficial and not affiliated with Neo4j, Inc.