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)