Neo4j - 如何找到两个节点之间的最短路径

问题描述:

我有一个关于Neo4j的非常基本的问题。Neo4j - 如何找到两个节点之间的最短路径

我已经导入一个简单的数据集包含多个节点为“example_nodes”,像这样:

sourceIdtargetId

因此,我的数据库拥有的源和目标简单的两列的表。

如何找到任意sourceIdtargetId之间的最短路径?

我最初的尝试是沿着线:

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"}

我在做什么错?我是否需要创建所有的关系之前,我可以运行一个查询(因为所有我目前做的是进口的节点和创建索引)

+0

是的,对于最短路径查询,您首先需要路径,因此在您将关系导入图形之前不要尝试查询。 – InverseFalcon

你应该找到sourcetarget第一,然后调用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.

+0

其实我认识到的一件事就是目标应该是'target.sourceId'不应该吗?也就是说,修改它仍然不会返回任何记录,是因为我没有创建关系? – waffl

+0

如果你没有这种关系,那么当然你不会找到任何:-)。 – cybersam

+0

请澄清你的意思是“目标应该是target.sourceId”。就我的理解你的用例而言,我的答案中的查询是有效的。 – cybersam