Получить узлы между двумя узлами шифра - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь получить все промежуточные узлы между двумя узлами в графе, используя Neo4j CYPHER.

Sample

Пример результата будет.

  1. Путь между 1 и 4 должен возвращать 1, 2, 3 и 4.
  2. Путь между 1 и 3 должен возвращать 1, 2 и 3.
  3. Путь между 4 и 6 должен возвращать 4, 5 и 6.
  4. Путь между 1 и 6 должен возвращать 1, 2, 3, 4, 5 и 6.

Трасса между 1,2,3 и 4 имеет суммарное расстояние непосредственно от 1 до 4. 4-6 будет иметь то же расстояние, что и 4,5,6.

Или запрос шифрования для удаления ярлыков, если доступен более длинный маршрут.

Я пробовал стандартную команду поиска пути, но она возвращает 1 и 4 каждый раз .:

MATCH path = shortestpath((s:Node{ Id: 1})-[Link*]->(e:Node {Id: 4}))
RETURN path LIMIT 1

public class Node {

    public long Id {get;set;}    

}

public class Link {

}

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Этот запрос вернет самый длинный путь между двумя конечными точками:

MATCH path = (:Node{Id: 1})-[:Link*]->(:Node {Id: 4})
RETURN path
ORDER BY LENGTH(path) DESC LIMIT 1;
0 голосов
/ 24 января 2019

Ну, вы специально просите в своем запросе найти кратчайший путь. Если ваше графическое изображение правильное, кратчайший путь между 1 и 4 является прямой ссылкой.

Итак, вы должны избавиться от этого и попробовать:

MATCH path = (s:Node{ Id: 1})-[Link*]->(e:Node {Id: 4})
RETURN path LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...