2017-07-29 19 views
0

neo4jで最短経路を見つけるには、私はAPOCライブラリのDijkstraのアルゴリズムを使用しています。問題は要求がただ1つの結果を返すということです。 5または10の最短経路を得ることは可能ですか?または、エッジの重さによって条件を設定できますか?たとえば、全長が500を超えています。Neo4j apocダイクストラプロシージャ

MATCH (start:Point {title: 'Some Point 1'}), (end:Point {title: 'Some Point 5'}) CALL apoc.algo.dijkstra(start, end, 'distance', 'value') YIELD path, weight RETURN path, weight 

答えて

1

さらに制御したい場合は、apocプロシージャの代わりに純粋なcypherソリューションを使用します。

トップ10:長さが500以上である

MATCH p=(start:Point {title: 'Some Point 1'})-[rels:distance*]->(end:Point {title: 'Some Point 5'}) 
WITH p, REDUCE(weight=0, rel in rels | weight + rel.value) as length 
RETURN p, length 
ORDER BY length ASC 
LIMIT 10 

パス:

MATCH p=(start:Point {title: 'Some Point 1'})-[rels:distance*]->(end:Point {title: 'Some Point 5'}) 
WITH p, REDUCE(weight=0, rel in rels | weight + rel.value) as length 
with p, length where length > 500 
return p, length 
LIMIT 10 
関連する問題