Database 什么';找出Neo4j中两个节点之间是否存在路径的最佳方法是什么?
我有一个Neo4j项目,有10万个节点和500万个关系。 我的问题是: 像“最短路径”这样的算法需要2-4ms才能找到最短路径Database 什么';找出Neo4j中两个节点之间是否存在路径的最佳方法是什么?,database,neo4j,path,Database,Neo4j,Path,我有一个Neo4j项目,有10万个节点和500万个关系。 我的问题是: 像“最短路径”这样的算法需要2-4ms才能找到最短路径 MATCH p = shortestPath((p1:Person{nickname:"sievers_amara"})- [:follows*..5]->(p2:Person{nickname:"burghardt_giulia"})) WHERE p1 <> p2 RETURN p MATCH p=shortestPath((p1:Person{
MATCH p = shortestPath((p1:Person{nickname:"sievers_amara"})-
[:follows*..5]->(p2:Person{nickname:"burghardt_giulia"}))
WHERE p1 <> p2
RETURN p
MATCH p=shortestPath((p1:Person{昵称:“sievers_amara”})-
[:跟随*.5]->(p2:Person{昵称:“burghardt_giulia”}))
其中p1p2
返回p
但我的算法要找出两个节点之间是否有路径需要大约200毫秒。。。
找到最短路径应该比找出是否有路径更难。。。
这是我的代码,用于确定是否存在路径:
MATCH p=(p1:Person{nickname:"sievers_amara"})-[r:follows*1..5]->(p2:Person{nickname:"burghardt_giulia"})
WHERE p1 <> p2
RETURN p LIMIT 1
MATCH p=(p1:Person{昵称:“sievers_amara”})-[r:follows*1..5]->(p2:Person{昵称:“burghardt_giulia”})
其中p1p2
返回p限制1
我能改进什么
编辑:将PROFILE
放在我的“是否有路径”查询结果前面:
shortestPath()
用于扩展,因此它使用最快的方法检测路径是否存在,并且在找到第一条路径后不会继续扩展
可变长度扩展使用扩展,因此,即使有一条非常短的路径到所讨论的节点,也不能保证会首先探索短路径,因此在这种情况下,在找到第一个匹配之前,会尝试许多路径(并且发现不匹配)(该匹配的路径可能根本不是最短路径).最短路径()
用于扩展,因此它使用最快的方法检测路径是否存在,并且在找到第一条路径后不会继续扩展
可变长度扩展使用扩展,因此,即使有一条非常短的路径到所讨论的节点,也不能保证会首先探索短路径,因此在这种情况下,在找到第一个匹配之前,许多路径正在尝试(并且发现不匹配)(该匹配的路径可能根本不是最短路径)。,你已经有了关于Person.nickname的索引?你能在你的第二个查询前面添加一个
配置文件
并发布结果吗?我确实在nickname上创建了一个约束。不确定这是否相同<代码>在(p:Person)断言p上创建约束。昵称是唯一的。我在帖子中添加了一个带有PROFILE
的屏幕截图。问题是规则模式匹配没有绕过最小化路径长度的图形。因此,规则模式匹配可以先沿着较长的路径进行,绕过较短的路径。因此,shortPath
更有效。我想,您已经有了关于Person.昵称的索引?您能在第二次查询之前添加一个配置文件
并发布结果吗?我确实在昵称上创建了一个约束。不确定这是否相同<代码>在(p:Person)断言p上创建约束。昵称是唯一的。我在帖子中添加了一个带有PROFILE
的屏幕截图。问题是规则模式匹配没有绕过最小化路径长度的图形。因此,规则模式匹配可以先沿着较长的路径进行,绕过较短的路径。因此,短路径
更有效。