2017-03-19 8 views
2

評価の高い映画が好きな人のグラフがあるので、各人の最高評価映画を抽出したいと思います。私は人の各ペアのレートでムービーをソートする必要がある次のクエリを使用しています。Neo4j:最適なパスの検索

MATCH (p1:People) -[:LIKES]-> (m:Movie) <-[:LIKES]- (p2:People) WHERE id(p1) < id(p2) 
WITH p1, p2, m ORDER BY m.Rating desc 
RETURN p1, p2, head(collect(m) as best 

私はに映画の評価(1 /評価またはmaxRating-レーティング)を置くことができますので、私は両方の人のトップの評価である映画識別できな関係を、好き。

MATCH (p1:People), (p2:People) call apoc.algo.dijkstra(p1, p2, 'LIKES', 'rating') YIELD path as path, weight as weight return path, weight 

真ん中のノードを終了、私の最初のクエリのパフォーマンスを向上させ、その開始のではなく、パスを返すために、最高得点ノードを介してallOptimumPathを見つけるだろうダイクストラのようなアルゴリズムを使用する方法はありますか? 事前に感謝します。

答えて

0

ここでは、抽出されたノードを報告するのではなく、パスを保存する代わりの方法があります。

MATCH path=(p1:People) -[:LIKES]-> (m:Movie) <-[:LIKES]- (p2:People) 
WHERE id(p1) < id(p2) 
WITH head(nodes(p)) as p1, last(nodes(p)) as p2, path 
ORDER BY m.Rating desc 
WITH p1, p2, head(collect(p)) as optPath 
RETURN optPath