通过 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