2016-04-01 11 views
0

私はこれらの2つのサイファークエリを実行しようとしていますが、それらの違いを理解していません。ここでの目的は、与えられた2つのノード間に複数のパスを見つけて、そのパス内のtransit_timeの合計が昇順になるようにすることです。2つのサイファークエリの違い

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を使用しています。

答えて

0

Neo4jにはintegrated tool to explain queriesがありますが、実際は説明していませんがプロファイリングしています。

また、実行計画については、hereのドキュメントを参照して、各操作について説明します。

複雑なクエリと実行計画の例: Neo4j execution plan example

source

関連する問題