也许我非常愚蠢或 Neo4j 不应该很快。 (免责声明:我是Neo4j noob)
我有以下简单的 dijkstra查询,它将永远运行。我必须至少等待 5-10分钟才能执行。有时候我的Chrome浏览器崩溃了。
示例图
Cypther查询
profile MATCH (startNode:Stop)--(st:Stoptime),
(endNode:Stop)--(et:Stoptime)
where endNode.name = 'Hauptbahnhof Süd' and
(startNode.name = 'Schlump' or startNode.name = 'U Schlump')
call apoc.algo.dijkstra(st, et, 'PRECEDES', 'weight') YIELD path, weight
return startNode, endNode, path, weight
limit 100;
计算机配置
我在Windows机器上使用Ubuntu VM,它有24GB Ram和6 Cpus。
索引
当我在上面的Query上运行配置文件时,我得到以下信息:
资料信息
为了爱上帝,我无法弄明白,瓶颈所在。我已经检查了所有其他答案,但无济于事。
答案 0 :(得分:1)
由于我没有数据集来测试我的建议,我只能指出你的方向。希望它会引导您找到答案。
在查看配置文件和查询时,我看到startNode和endNode都是类型:Stop,并且Stop.name属性已编入索引。
在寻找endNode.name ='HauptbahnhofSüd'时,估计有3行,并返回3行。
然而,当查找(startNode.name ='Schlump'或startNode.name ='U Schlump')时,估计有6行,但返回了14827行。
确实有14827:停止包含'Schlump'或'U Schlump'的节点?
或者它是6个估计的行?如果是后者,则可以在没有OR的情况下运行查询:
其中endNode.name ='HauptbahnhofSüd'和startNode.name ='Schlump'
了解分析器的用途。
如果按预期执行,那么解决方案可能是重写查询以包含不同格式的OR逻辑?
也许 其中endNode.name ='HauptbahnhofSüd'和startNode.name IN ['Schlump','U Schlump']
还发现此older answer表示OR运算符和3.2之前的索引存在问题。
我记得曾经看过另一个关于OR问题的最新答案,但现在似乎无法找到它。
祝你好运!