2
我对Neo4j很新。有人可以向我解释(请逐步说明)我如何实现Dijkstra算法来找到两个节点之间的最短路径?使用Cypher可以简单地做到吗?在Neo4j中实现Dijkstra算法
我已经尝试过的最短路径算法,但它是非常缓慢:
MATCH (from: Location {LocationName:"x"}), (to: Location {LocationName:"y"}) , path = (from)-[:CONNECTED_TO*1..5]->(to)
RETURN path AS shortestPath,
reduce(distance = 0, r in relationships(path)| distance+toInt(r.Distance))
AS totalDistance
ORDER BY totalDistance ASC
LIMIT 1
我的节点是:与性能LocationID和LOCATIONNAME 位置我的关系是:CONNECTED_TO财产距离
我有更多的超过6000的关系
请注意在上面的代码中,我限制为1..5, 当我没有定义这个限制时,查询不会给出任何结果(ke上执行的EPS)
感谢
感谢您的回应克里斯托夫。唯一的附加点(我忘记提及,这是我的错),是我还希望有最短路径的总距离作为查询的结果。这就是为什么我在发布的查询中使用了reduce函数。但是,使用此函数往往会使查询非常缓慢并且实际上不可用,因此您可以提出解决此问题的方法。谢谢 – Shazu 2014-12-07 22:08:08
你可以在return语句中使用它:RETURN path,length(shortestPath)长度为 – 2014-12-07 22:12:04
感谢您的回复。节点之间的关系具有属性“距离”。最短路径的长度仅仅返回跳数,而不是节点x和节点y(开始和结束节点)之间的实际距离。 那么有可能以有效的方式返回最短路径的距离吗? – Shazu 2014-12-07 22:24:56