将商品推荐SQL查询转换为Cypher查询的实现方案
对应的Cypher查询编写
首先假设你的图数据模型定义如下:
- 节点标签:
User(用户)、Product(商品) - 关系类型:
RATED(评分),关系属性value存储评分值
基础Cypher查询
MATCH (user1:User {id: 1})-[r1:RATED {value: 5}]->(productA:Product) MATCH (productA)<-[r2:RATED {value: 5}]-(user2:User) WHERE user2.id <> user1.id MATCH (user2)-[rB:RATED {value: 5}]->(productB:Product) // 排除用户1已经评价过的商品,实现「未购买/未评价」的推荐要求 OPTIONAL MATCH (user1)-[:RATED]->(excludedProduct:Product) WHERE excludedProduct.id = productB.id WITH productB, excludedProduct WHERE excludedProduct IS NULL RETURN DISTINCT productB
逻辑说明
- 第一步
MATCH定位到目标用户user1,并找到他打5分的所有商品productA - 第二步
MATCH找到所有给productA打5分的其他用户user2,通过WHERE排除目标用户自己 - 第三步
MATCH找到这些相似用户user2打5分的商品productB - 通过
OPTIONAL MATCH和后续过滤,排除掉目标用户已经评价过的商品,确保推荐的是用户未接触过的商品 - 最后用
DISTINCT去重,避免同一个商品被多次推荐
优化建议
如果需要按推荐热度(被相似用户打5分的次数)排序,可以修改返回语句:
RETURN productB, COUNT(productB) AS recommendationCount ORDER BY recommendationCount DESC
内容的提问来源于stack exchange,提问作者KWriter
相关产品推荐
相关产品推荐

