Neo4j:最佳路径搜索

时间:2017-03-19 10:22:46

标签: neo4j cypher neo4j-apoc

有了喜欢评分电影的人的图表,我想为每一对人提取他们评分最高的电影。我使用以下查询,该查询要求为每对人员分配电影的费率。

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

1 个答案:

答案 0 :(得分: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