【问题标题】:Neo4J find shortest path using all nodes (unordered) cypherNeo4J 使用所有节点(无序)密码找到最短路径
【发布时间】:2015-10-07 20:06:57
【问题描述】:

我不确定这是否可以以任何有效的方式完成,但我希望可以。

我正在获取一组数据,其中包含数据,可以让我找到非常具体的节点。但是,根据节点的连接方式,这些数据没有以任何方式排序。

我要做的是能够找到neo4J中的所有节点(最多7个),然后用这7个节点说,找到连接它们的路径。

这些给定的节点将是在所需路径中连接的唯一节点。

基本上我想得到一个看起来像的集合

1,2,3,4,5,6,7

并且能够找到 2->7->6->34

任何帮助或指导将不胜感激

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我会这样做的方式如下:

    您需要一个起始节点,您将从那里查询接下来的 7 个节点。为了能够找到前 7 个节点,我将引入一个起始根节点。让我们简单地称它为 :Root 。

    MATCH (:Root)-[r:NEXT*1..7]->(x)<-[]-(y) RETURN x, y
    

    甚至更简单:

    MATCH (:Root)-[r:NEXT*..7]->(x)<-[]-(y) RETURN x, y
    

    :根当然可以是您集合中的任何其他节点,以便从那里获取接下来的七个节点。

    这是你想要的吗?

    进一步查看以下 neo4j 备忘单,其中有一些很棒的提示:

    http://assets.neo4j.org/download/Neo4j_CheatSheet_v3.pdf

    问候

    编辑

    好吧抱歉,我误会你了。

    也许这会让你走得更远:

    MATCH (n:Node) where n.refId in [1,2,3,4,5,6,7] 
    MATCH (n2:Node) where n2.refId in [1,2,3,4,5,6,7]
    MATCH p=shortestPath((q)-[:NEXT*]-(q2)) 
    return collect(distinct p)
    

    或者如果这些数字是节点 ID,则如下所示:

    MATCH (n:Node) where id(n) in [1,2,3,4,5,6,7] 
    MATCH (n2:Node) where id(n2) in [1,2,3,4,5,6,7]
    MATCH p=shortestPath((q)-[:NEXT*]-(q2)) 
    return collect(distinct p)
    

    这实际上将给定节点之间的所有路径作为集合返回。 所以它不会为所有这些节点返回一条路径。 我不知道有这样的功能。

    然而,neo4j 浏览器只显示所有所需节点之间的单一路径,因为它具有自动完成功能。因此,如果您想将这些路径连接到单个路径,我认为您必须在代码中构建自己的逻辑。

    也许这至少是问题的起点

    【讨论】:

    • 如何找到连接所有给定节点的路径,并且只连接给定节点?有时我有 70 个关系来往单个节点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多