微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 Cypher 查询 Neo4j

如何解决通过 Cypher 查询 Neo4j

我是 Neo4j 的新手,我正在尝试对他们评分的用户和电影的二部图进行投影。这是我掌握的信息:

enter image description here

我在 Neo4j 中创建了图表,这就是我得到的:

enter image description here

我正在尝试做一个投影,将给电影评分为 SAME 的用户联系起来,但我没有成功。这是我用于投影的代码

MATCH (u:User)-[r:RATED_MOVIE]->(m:Movie) 
WITH m,collect(u) as users,collect(r) as raitings,count(r) as weights
UNWIND users as u1
UNWIND users as u2
UNWIND raitings as r1
UNWIND raitings as r2
WITH  u1,u2,r1,r2
WHERE u1.UserId < u2.UserId and r1.rating = r2.rating
CREATE (u1)-[:CONNECTED{common_movies_rated:weights}]->(u2)
RETURN u1,u2

预期的输出是这样的图:

enter image description here

解决方法

很好的描述,感谢您指定所需的输出。

您正在寻找的是两个人对同一部电影给予相同评分的路径,然后计算两个人之间的出现次数以获得权重,以便您可以创建他们之间的关系。

我们可以使用更简单的查询来获得您需要的结果。

MATCH (u1:User)-[r:RATED_MOVIE]->(m:Movie)<-[r2:RATED_MOVIE]-(u2)
WHERE id(u1) < id(u2) AND r.rating = r2.rating
WITH u1,u2,count(m) as weight
CREATE (u1)-[:CONNECTED {common_movies_rated:weight}]->(u2)
RETURN u1,u2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。