【问题标题】:how to find the shortest relationship between the two nodes in neo4j?Neo4j中如何找到两个节点之间的最短关系?
【发布时间】:2020-01-22 22:22:00
【问题描述】:

我的图表中有多个关系。我想找到两个节点之间的最短关系。

我有两种类型的节点: 1人 2.公司

以及这些节点之间的许多关系,例如电话、电子邮件、地址等。

Here is the screenshot of my graph

我尝试过:
MATCH (r)-[q:*1..3]-(p) return type(q)
但它给出了一个错误信息:

Invalid input '*': expected whitespace or a rel type name (line 1, column 14 (offset: 13))

我也试过MATCH (r)-[*]-(p) return *,但它需要无限的时间。我也尝试通过索引查询以加快进程,但仍然没有运气。

请告诉我如何找到节点之间的最短路径。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    此查询中有 2 个错误:

    MATCH (r)-[q:*1..3]-(p)  return type(q)
    
    1. 冒号 (":") 只能用于类型名称前面的关系模式中。由于在您的情况下您不想指定类型名称,因此您需要省略冒号。
    2. 由于q 用于可变长度路径模式,其值将是关系的列表

    这是一个实际上应该返回您的查询似乎试图返回的查询:

    MATCH ()-[qs*..3]-()
    UNWIND qs AS q
    RETURN TYPE(q)
    

    现在,如果您想找到 2 个节点之间的最短路径(如您的问题主题所示),请参阅 @DaveBennett 的回答(假设他修复了我在对他的回答的评论中提到的问题)。

    【讨论】:

      【解决方案2】:

      您是否曾在 shortestPath 上查阅过 Neo4j 密码手册?

      https://neo4j.com/docs/cypher-manual/current/clauses/match/#query-shortest-path

      如果你想找到最短路径...

      MATCH path=shortestPath((r:person {name: 'Sandeep Garg'})-[q*1..3]-(p:Company {name: 'Gopal Prjapati'}))  
      RETURN path
      

      如果你想找到最短路径的关系

      MATCH path=shortestPath((r:person {name: 'Sandeep Garg'})-[q*1..3]-(p:Company {name: 'Gopal Prjapati'}))  
      RETURN realtionships(path)
      

      【讨论】:

      • 需要一些简单的修复来使您的查询正常工作:您需要从可变长度关系模式中删除冒号,并且您不应该在每个中以 2 种不同的方式定义 p查询。
      • 感谢您的快速回复。它对我有用。 @cybersam 提到了冒号错误。我想到了。谢谢
      • 是的 - 我的工作很糟糕 :) 至少 @cybersam 在那里进行质量控制
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多