【问题标题】:Get nodes in between two nodes cypher获取两个节点密码之间的节点
【发布时间】:2019-01-17 22:06:29
【问题描述】:

我正在尝试使用 Neo4j CYPHER 获取图中两个节点之间的所有中间节点。

一个示例结果将是。

  1. 1 和 4 之间的路径应返回 1、2、3 和 4。
  2. 1 和 3 之间的路径应返回 1、2 和 3。
  3. 4 和 6 之间的路径应返回 4、5 和 6。
  4. 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 之间是否有任何停靠点
  • 我已更新问题以使其更容易。

标签: neo4j cypher


【解决方案1】:

嗯,您在查询中专门要求找到最短路径。如果您的图表图像正确,则 1 和 4 之间的最短路径是直接链接。

所以你应该摆脱它并尝试:

MATCH path = (s:Node{ Id: 1})-[Link*]->(e:Node {Id: 4})
RETURN path LIMIT 1

【讨论】:

    【解决方案2】:

    此查询将返回 2 个端点之间的最长路径:

    MATCH path = (:Node{Id: 1})-[:Link*]->(:Node {Id: 4})
    RETURN path
    ORDER BY LENGTH(path) DESC LIMIT 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2021-10-20
      • 1970-01-01
      • 2018-02-14
      相关资源
      最近更新 更多