两个密码查询之间的差异

时间:2016-04-01 11:27:36

标签: neo4j cypher py2neo

我正在尝试运行这两个密码查询,我不理解它们之间的区别。这里的目的是在给定的两个节点之间找到多条路径,使得该路径中的transit_time之和按升序排列。

Q1:

MATCH p =(:`ml`  { placeId: 960 })-[:ETA*0..10]->(:`ml`  { placeId: 814 })
return p, p as allshortestPaths, 
REDUCE(time=0, r in relationships(p) | time+r.transit_time) AS totalTime 
ORDER BY totalTime ASC

Q2:

MATCH (from:`ml` { placeId: 960}), (to: `ml` {placeId: 814}) , 
paths = allShortestPaths((from)-[:ETA*]->(to)) 
WITH REDUCE(time = 0, rel in rels(paths) | time + rel.transit_time) 
AS totalTime, paths 
RETURN (totalTime) 
ORDER BY totalTime ASC

在此我从Q1得到了最好的结果。这些操作也需要很长时间。 任何其他更好的方法可能是使用图算法?我认为有可能使用Dijkstra算法做任何有关如何指定cost_parameter的帮助以及如何使用将是很好的。 我正在使用py2neo和neo4j。

1 个答案:

答案 0 :(得分:0)

Neo4j有一个integrated tool to explain queries,事实上它不是在解释而是分析。

您还可以找到here有关执行计划的一些文档,以解释每个操作。

具有复杂查询的执行计划示例: Neo4j execution plan example

source