2

有一张喜欢评分电影的人的图表,我想为每一对人提取他们评分最高的电影。我正在使用以下查询,该查询需要按每对人的费率对电影进行排序。

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 来提高我的第一个查询和返回路径的性能,而不是它们的起始、中间和结束节点?提前谢谢了。

4

1 回答 1

0

这是保留路径而不是报告提取的节点的替代解决方案。

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
于 2017-03-28T19:44:58.763 回答