Я пытаюсь найти лучший путь между двумя узлами. Я выполняю два способаNeo4j - shortestPath на каждом уровне до N-уровней
- найти кратчайший путь, используя shortestPath метод()
- найти все пути и выбирать лучший путь, используя уменьшить функцию
В первом способе shortestPath() возвращает путь с меньшей степенью разделения. Второй путь возвращает путь, который меньше в агрегированном значении.
Example 1:
MATCH (a:Person),(b:Person)
MATCH path=shortestPath((a)-[r*]-(b))
RETURN path
Example 2:
MATCH (a:Person),(b:Person)
MATCH path=(a)-[r*]-(b)
WITH path, REDUCE(distance=0, r IN relationships(path)|distance+r.distance) AS WEIGHT
RETURN path ORDER BY WEIGHT
Но в любом случае я не могу найти лучший путь на каждом уровне. То есть
Для разделения 1-й степени - один путь
Разделение второй степени - один путь
Разделение третьей степени - один путь Как мудрый.
Как я могу это достичь?
Это решение работает для небольших графов, но если вы хотите разумную производительность, рекомендуется использовать [алгоритмов на графах АПБО] (https://neo4j-contrib.github.io/neo4j-apoc-procedures/# _graph_algorithms_work_in_progress). –