找出Neo4j中2个节点之间是否存在路径的最佳方法是什么?

时间:2018-10-20 15:45:23

标签: database neo4j path

我有一个Neo4j项目,其中包含100k个节点和5m个关系。 我的问题: 诸如“最短路径”之类的算法需要2-4毫秒才能找到最短路径。

MATCH p = shortestPath((p1:Person{nickname:"sievers_amara"})-
[:follows*..5]->(p2:Person{nickname:"burghardt_giulia"}))
WHERE p1 <> p2
RETURN p

但是我的算法来找出2个节点之间是否存在路径大约需要200毫秒... 找到最短的路径比发现是否有路径要困难得多。 这是我的代码,以确定是否存在路径:

MATCH p=(p1:Person{nickname:"sievers_amara"})-[r:follows*1..5]->(p2:Person{nickname:"burghardt_giulia"})
WHERE p1 <> p2
RETURN p LIMIT 1

我可以改善什么?

编辑:将PROFILE放在我的“是否有路径”查询前面会导致: enter image description here

1 个答案:

答案 0 :(得分:3)

shortestPath()使用breadth-first进行扩展,因此它正在使用最快的方法来检测路径的存在,并且一旦找到第一个路径,它就不会继续扩展。

可变长度扩展使用depth-first扩展,因此,即使到所讨论节点的路径很短,也无法保证先探索短路径,因此在这种情况下,我们尝试了许多路径(并且发现不匹配)在找到第一个匹配项之前(并且该匹配项的路径可能根本不是最短的路径)。