【发布时间】:2019-01-17 22:06:29
【问题描述】:
我正在尝试使用 Neo4j CYPHER 获取图中两个节点之间的所有中间节点。
一个示例结果将是。
- 1 和 4 之间的路径应返回 1、2、3 和 4。
- 1 和 3 之间的路径应返回 1、2 和 3。
- 4 和 6 之间的路径应返回 4、5 和 6。
- 1 和 6 之间的路径应返回 1、2、3、4、5 和 6。
1,2,3 和 4 之间的路径直接具有与 1 和 4 的组合距离。 4 到 6 的距离与 4、5、6 的距离相同。
或者,如果有更长的路线可用,则可以使用密码查询来删除快捷方式。
我尝试了一个标准的寻路命令,但每次都返回 1 和 4。:
MATCH path = shortestpath((s:Node{ Id: 1})-[Link*]->(e:Node {Id: 4}))
RETURN path LIMIT 1
public class Node {
public long Id {get;set;}
}
public class Link {
}
谢谢。
【问题讨论】:
-
既然从 4 到 5 的路径(如果我们遵循关系的方向性的话)不包括 6,那为什么说“4 到 5 之间的路径应该返回 4、5 和 6”呢? ?另外,您能否解释一下您的模型中的“强制”究竟是什么意思?
-
对不起,这本来是一个 6。强制意味着它需要在完整路径中指定。例如,一个人可能会绘制一条路径 1,2,3,4,6 或 1,4,6 或 1,4,5,6,因为有些人很懒惰。我正在使用 i 和 i + 1 运行一个循环,以查找它们遗漏的任何中间节点。
-
一种看待它的方式是,一列火车可能会在 1、4 和 6 停靠,但我想知道它在 1 和 4 以及 4 和 6 之间经过哪些车站。另一列火车可能会在 1 停靠, 3,4 和 5 所以我想知道在 1 和 3、3 和 4 以及 4 和 6 之间是否有任何停靠点
-
我已更新问题以使其更容易。