Neo4j:最佳路径搜索
Neo4j: optimum path search
有了一张喜欢评分电影的人的图表,我想为每一对人提取他们评分最高的电影。我正在使用以下查询,它需要根据每对人的费率对电影进行排序。
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/rating 或 maxRating-rating)放入 :LIKES 关系中,这样我就可以确定哪部电影是两个人的最高评分。
MATCH (p1:People), (p2:People) call apoc.algo.dijkstra(p1, p2, 'LIKES', 'rating') YIELD path as path, weight as weight return path, weight
有没有一种方法可以使用类似 Dijkstra 的算法来通过得分最高的节点找到 allOptimumPath 来提高我的第一个查询和 return 路径的性能,而不是它们的开始、中间和结束节点?
非常感谢。
这是一个替代解决方案,它保留路径而不是报告提取的节点。
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
有了一张喜欢评分电影的人的图表,我想为每一对人提取他们评分最高的电影。我正在使用以下查询,它需要根据每对人的费率对电影进行排序。
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/rating 或 maxRating-rating)放入 :LIKES 关系中,这样我就可以确定哪部电影是两个人的最高评分。
MATCH (p1:People), (p2:People) call apoc.algo.dijkstra(p1, p2, 'LIKES', 'rating') YIELD path as path, weight as weight return path, weight
有没有一种方法可以使用类似 Dijkstra 的算法来通过得分最高的节点找到 allOptimumPath 来提高我的第一个查询和 return 路径的性能,而不是它们的开始、中间和结束节点? 非常感谢。
这是一个替代解决方案,它保留路径而不是报告提取的节点。
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