我有一个关于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"}
我做错了什么?在运行查询之前是否需要创建所有关系(因为到目前为止我已经完成了导入节点和创建索引的所有关系)
答案 0 :(得分:2)
您应首先找到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。
答案 1 :(得分:0)
更紧凑,更简洁的查询将是:
match s=shortestPath((src {sourceId:1234})-[*]-(dst {targetId:5678})) return s