Neo4J находит два узла, кратчайший путь между которыми имеет длину n
Я хотел бы знать, есть ли способ найти два узла, кратчайший путь между которыми имеет определенную длину, скажем, 10.
Все мои узлы имеют одинаковую метку; "n1", и кратчайший путь может проходить через любой тип ребра.
До сих пор я делал это вручную, находя кратчайший путь между узлом n и узлом m, постоянно меняя n и m и останавливаясь, когда нахожу путь длиной 10.
Вот запрос шифра:
match sp = shortestpath((startNode)-[*]->(endNode)) где id(startNode) = 1 и id(endNode) = 2 возвращает sp
Обратите внимание, я не указываю метку узла, так как у меня есть только одна метка на графике.
Поэтому я просто постоянно меняю начальный и конечный узлы и запускаю его, пока не найду путь нужной длины.
Я уверен, что есть более простой способ сделать это, но, поскольку я новичок в Neo, я изо всех сил пытаюсь понять это.
Я также пробовал это:
MATCH (n1), (n2)
WHERE n1 <> n2 and shortestPath((n1)-[*]-(n2)) = 5
RETURN n1, n2
LIMIT 2
Однако я не верю, что это правильно, потому что кратчайшие пути длины 5 очень распространены в моем графе, и для их выполнения требуется много времени...
1 ответ
Это сработало для меня!
MATCH (n1), (n2)
WHERE n1 <> n2 and length(shortestPath((n1)-[*]->(n2))) = 10
RETURN n1, n2
LIMIT 1