通过 Cypher 查询 Neo4j 进行二分图投影

Bipartite graph projection via Cypher query Neo4j

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

enter image description here

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

enter image description here

我正在尝试进行投影以将对电影进行评级的用户联系起来,但我没有成功。这是我的投影代码:

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