Neo4j - Как сгруппировать все узлы между путями по расстоянию - PullRequest
0 голосов
/ 07 ноября 2018

Предположим, что есть два кратчайших пути равного расстояния между двумя заданными узлами. Я хочу сгруппировать все узлы между ними по расстоянию.

Пример: есть два кратчайших пути на графике:
1) A - B - C - D - E
2) A - B - J - K - E

Что я ожидаю, конечный результат, как:

B - 1  
C,J - 2  
D, K - 3  
E - 4  

Один из подходов состоит в том, чтобы найти все узлы, а затем выполнить цикл, чтобы найти длину, но это не является ни эффективным, ни абсолютно правильным.

Пожалуйста, присылайте любые документы и ссылки с вашим ответом, поскольку я не смог найти их.

1 Ответ

0 голосов
/ 07 ноября 2018

Это пример, основанный на наборе данных фильма:

MATCH p=allshortestPaths( (bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"}))
WITH nodes(p) AS path
UNWIND range(0, size(path)-1, 1) AS index
    WITH index, path[index] AS node
    RETURN index, collect(DISTINCT node)
    ORDER BY index ASC

Когда путь найден, я перебираю его, чтобы создать коллекцию index & node. Тогда вам просто нужно сделать агрегацию на основе индекса (RETURN index, collect(DISTINCT node))

...