Апок Дейкстра движется в обоих направлениях, вычисляя кратчайший путь

Я пытался использовать neo4j и его библиотеку процессов apoc, чтобы получить кратчайший путь между двумя узлами.
Например, я создаю 2 узла, как показано ниже.

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

Затем я устанавливаю их отношения как таковые

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

Теперь я установил прямые отношения от А к Б, а не наоборот. Итак, когда я вызываю 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.

Может кто-нибудь сказать мне, почему это так? Почему Дейкстра игнорирует направление? Любая помощь приветствуется.


person MrRo    schedule 03.07.2017    source источник


Ответы (1)


Вам нужно добавить > или < к типу отношения в вашем запросе.

MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'}) 
CALL apoc.algo.dijkstra(start, end, 'distance>', 'value') YIELD path, weight 
RETURN path, weight
person Dave Bennett    schedule 03.07.2017
comment
Большое спасибо. Я не знаю, было ли это из-за того, что у меня не было опыта работы с Neo4j, но я не смог найти таких деталей в документации apoc. - person MrRo; 04.07.2017
comment
Что здесь означает ›или‹? - person jchaykow; 20.11.2019
comment
Это руководство реализацией. Третий параметр в подписи - relationshipTypesAndDirections. - person Dave Bennett; 20.11.2019