【问题标题】:Bipartite graph projection via Cypher query Neo4j通过 Cypher 查询 Neo4j 进行二分图投影
【发布时间】:2021-06-18 19:29:24
【问题描述】:

我是 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

【问题讨论】:

    标签: database graph neo4j cypher bipartite


    【解决方案1】:

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

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多