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

时间:2017-05-25 23:52:15

标签: neo4j cypher graph-databases

我有一个关于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"}

我做错了什么?在运行查询之前是否需要创建所有关系(因为到目前为止我已经完成了导入节点和创建索引的所有关系)

2 个答案:

答案 0 :(得分:2)

您应首先找到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。

答案 1 :(得分:0)

更紧凑,更简洁的查询将是:

match s=shortestPath((src {sourceId:1234})-[*]-(dst {targetId:5678})) return s