ShortestPath с 3 или более узлами

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

Например, с 2 узлами:

MATCH (personA:Person { contactId: 1000073595058 }),(personB:Person { contactId: 1000295524418 }), p = shortestPath((personA)-[*..30]-(personB)) RETURN p 

Например, с 3 узлами:

MATCH (personA:Person { contactId: 1000073595058 }),(personB:Person { contactId: 1000295524418 }),(personC:Person { contactId: 1000331998948 }), p = shortestPath((personA)-[*..30]-(personB)-[*..30]-(personC)) RETURN p 

Но когда я выполняю, возвращается исключение. Как я могу это сделать?

1 ответ

Решение

Ты можешь только MATCH shotestPath между двумя узлами. Вы должны разделить свой запрос:

MATCH (personA:Person { contactId: 1000073595058 }),
      (personB:Person { contactId: 1000295524418 }),
      (personC:Person { contactId: 1000331998948 })
WITH personA, personB, personC
MATCH p = shortestPath((personA)-[..30]-(personB)
MATCH p2 = shortestPath((personB)-[..30]-(personC)
RETURN p, p2

В зависимости от того, что вы хотите сделать с результатами, вы можете использовать функции агрегирования, например, чтобы получить все узлы из обоих путей:

...
RETURN nodes(p)+nodes(p2)
Другие вопросы по тегам