neo4j Cypher:图书推荐

vlju58qv  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(178)

我有3个节点:

  • 用户(idage)。
  • 额定值(isbnidrating(其值为010))。
  • 书籍(isbntitle,...)

关系:

Users - [GIVE_RATINGS]-Ratings -[BELONGS_TO]- Books

我需要创建一个推荐,其中输入将是读者喜欢的一本或多本书,输出将是那些评分为正面的用户也给读者已经读过的书打分的书。
我尝试创建这样的查询,但它不起作用。

MATCH (u:Users{id:'11676'})-[:GIVE_RATING]->(book)<-[:GIVE_RATING]-(person), (person)-[:GIVE_RATING]->(book2)<-[:GIVE_RATING]-(r:Ratings{rating:'9'}) 
WHERE NOT EXIST (book2)-[:GIVE_RATING]->(u) 
RETURN book2.isbn,person.id
yhived7q

yhived7q1#

您可能希望将评分存储为整数或浮点数,而不是字符串,最好在新版本中使用[not] exists { pattern }
常见的建议语句如下所示:

MATCH (u:Users{id:$user})-[:GIVE_RATING]->(rating)
      <-[:GIVE_RATING]-(person)-[:GIVE_RATING]->(rating2)
      <-[:GIVE_RATING]-(rating3) 
WHERE abs(rating2.rating - rating.rating) <= 2 // similar ratings
AND rating3.rating >= 9
AND NOT EXIST { (rating3)<-[:GIVE_RATING]-(u) } 
WITH rating3, count(*) as freq
RETURN rating3.isbn,person.id
ORDER BY freq DESC LIMIT 5

您还可以在用户和图书之间的关系上表示您的评级信息,而不需要额外的Node。

相关问题