Apoc Dijkstra在计算最短路径的同时横穿两个方向

时间:2017-07-03 15:17:09

标签: neo4j cypher dijkstra neo4j-apoc

我一直在尝试使用neo4j及其apoc进程库来获取2个节点之间的最短路径。
例如我创建了2个节点,如下所示

CREATE (:Point {title:'A'})
CREATE (:Point {title:'B'})

然后我建立他们的关系

MATCH (u1:Point {title:'A'}), (u2:Point {title: 'B'}) 
CREATE (u1)-[:distance {value:10}]->(u2)

现在我建立了从A到B的定向关系,而不是相反。 所以当我打电话给apoc Dijkstra时如下

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

我不应该得到任何结果,因为它们没有从B到A的定向路径。但是我得到的结果与使用从A到B的路径运行查询时的结果相同。

有人可以告诉我为什么会这样吗?为什么Dijkstra无视这个方向?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您需要在查询中为关系类型添加><

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