【问题标题】:Cypher recommendation scoreCypher 推荐分数
【发布时间】:2019-11-01 18:36:38
【问题描述】:

看GrandStack电影工作室https://github.com/grand-stack/grand-stack-movies-workshop/blob/master/neo4j-database/answers.md的例子

此处为推荐电影提出的查询

MATCH (m:Movie) WHERE m.movieId = $movieId
MATCH (m)-[:IN_GENRE]->(g:Genre)<-[:IN_GENRE]-(movie:Movie)
WITH m, movie, COUNT(*) AS genreOverlap
MATCH (m)<-[:RATED]-(:User)-[:RATED]->(movie:Movie)
WITH movie,genreOverlap, COUNT(*) AS userRatedScore
RETURN movie ORDER BY (0.9 * genreOverlap) + (0.1 * userRatedScore)  DESC LIMIT 3

这个查询会不会有偏见,因为它只会为与 ID 为 $movieId 的电影共享至少一种类型的电影计算 userRatedScore?

一个独立计算两个分数的重写查询看起来如何,这意味着它仍然会计算给定电影的 userRatedScore,即使它不与 ID 为 $movieId 的电影共享流派

【问题讨论】:

    标签: neo4j cypher grandstack


    【解决方案1】:

    如果您想忽略 Genre 提供的权重,则可以删除搜索它的查询部分,例如:

    MATCH (m:Movie) WHERE m.movieId = $movieId, (m)<-[:RATED]-(:User)-[:RATED]->(movie:Movie)
    WITH movie, COUNT(*) AS userRatedScore
    RETURN movie ORDER BY (0.1 * userRatedScore)  DESC LIMIT 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多