2016-04-01 26 views
0

Bu iki cypher sorgusunu çalıştırmaya çalışıyorum ve aralarındaki farkı anlamıyorum. Buradaki amaç, belirli iki düğüm arasında birden fazla yol bulmaktır, böylece bu yoldaki transit_time toplamı artan sıradadır.arasındaki fark

S1: Bu ise

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 

ben Q1 en iyi sonucu almak Ayrıca bu işlemler çok uzun zaman alabilir: Q2

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 

. Bunu yapmak için daha iyi bir yol, grafik algoritmalarını kullanıyor olabilir mi? Dijkstra algoritmasını kullanarak bunun maliyet_parametrenin nasıl belirtileceğine ve nasıl kullanılacağına dair herhangi bir yardımın yapılmasının mümkün olduğunu düşünüyorum. Py2neo ve neo4j kullanıyorum.

cevap

0

Neo4j bir integrated tool to explain queries sahiptir, aslında açıklamıyor ama profil oluşturuyor.

Ayrıca, her bir işlemi açıklamak için here yürütme planı hakkında bazı belgeleri de bulabilirsiniz.

karmaşık bir sorgu ile yürütme planı bir örnek: Neo4j execution plan example

source