如何找到neo4j中两个节点之间最短的关系?

时间:2020-01-22 22:22:00

标签: neo4j cypher

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

我有两种类型的节点: 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 *,但这花了无限的时间。我还尝试通过索引来加快查询速度,但仍然没有运气。

请让我知道如何找到节点之间的最短路径。

2 个答案:

答案 0 :(得分:4)

此查询中有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的答案(假设他已修复我在其答案的评论中提到的问题)。

答案 1 :(得分:1)

您是否有机会在shortestPath上查阅过Neo4j Cypher手册?

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)
相关问题