Neo4j: поиск оптимального пути

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

MATCH (p1:People) -[:LIKES]-> (m:Movie) <-[:LIKES]- (p2:People) WHERE id(p1) < id(p2)
WITH p1, p2, m ORDER BY m.Rating desc
RETURN p1, p2, head(collect(m) as best

Я могу поместить рейтинг фильма (1/рейтинг или maxRating-рейтинг) в отношения :LIKES, что, следовательно, позволит мне определить, какой фильм имеет наивысший рейтинг у обоих людей.

MATCH (p1:People), (p2:People) call apoc.algo.dijkstra(p1, p2, 'LIKES', 'rating') YIELD path as path, weight as weight return path, weight

Есть ли способ использовать алгоритм, подобный Дейкстре, который находил бы allOptimumPath через узлы с наивысшими оценками, чтобы повысить производительность моего первого запроса и путей возврата, а не их начальных, средних и конечных узлов? Спасибо заранее.


person Pierre    schedule 19.03.2017    source источник


Ответы (1)


Вот альтернативное решение, которое сохраняет путь, а не сообщает об извлеченных узлах.

MATCH path=(p1:People) -[:LIKES]-> (m:Movie) <-[:LIKES]- (p2:People) 
WHERE id(p1) < id(p2)
WITH head(nodes(p)) as p1, last(nodes(p)) as p2, path 
ORDER BY m.Rating desc
WITH p1, p2, head(collect(p)) as optPath
RETURN optPath
person Pierre    schedule 28.03.2017