【问题标题】:Neo4j: optimum path searchNeo4j:最佳路径搜索
【发布时间】:2017-03-19 10:22:46
【问题描述】:

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

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

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-12-03
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多