Neo4j - 如何找到两个节点之间的最短路径
问题描述:
我有一个关于Neo4j的非常基本的问题。Neo4j - 如何找到两个节点之间的最短路径
我已经导入一个简单的数据集包含多个节点为“example_nodes”,像这样:
sourceId
,targetId
因此,我的数据库拥有的源和目标简单的两列的表。
如何找到任意sourceId
和targetId
之间的最短路径?
我最初的尝试是沿着线:
MATCH (source:example_nodes),(target:example_nodes),
p = shortestPath((source)--(target))
WHERE (source.sourceId) = 1234 AND (target.targetId) = 5678
return p
不返回任何记录,我可以清楚地看到在我的数据库中的第一行是本身的单一路径:
{"sourceId":"1234","targetId":"5678"}
我在做什么错?我是否需要创建所有的关系之前,我可以运行一个查询(因为所有我目前做的是进口的节点和创建索引)
答
你应该找到source
和target
第一,然后调用shortestpath
:
MATCH (source:example_nodes),(target:example_nodes)
WHERE source.sourceId = 1234 AND target.targetId = 5678
MATCH p = shortestPath((source)-[*]-(target))
return p;
如果此查询运行时间过长,请尝试限制搜索的最大路径长度。例如,使用[*..8]
将长度限制为8.
是的,对于最短路径查询,您首先需要路径,因此在您将关系导入图形之前不要尝试查询。 – InverseFalcon