【问题标题】:Creating one to many relations in neo4j在 neo4j 中创建一对多关系
【发布时间】:2019-02-26 10:40:00
【问题描述】:

所以我对使用图形数据库非常陌生,因此我选择了 neo4j。我正在尝试基于图形节点制作一个简单的推荐系统。

所以我的原始数据集是一个 CSV,如下所示:

由于某些字段有分号,因此我将它们分开并将其解析为新的 CSV。 (基本上每个字段的组合)

新的 CSV 如下所示:

上图只显示了 N2,我也为 N1 和 N3 做了同样的事情。

现在,我需要以这样的方式创建节点和关系,每个

  • Name知道Language
  • NameWORKED_WITH Database

因此,我运行了以下查询:

LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
CREATE (n:Name {name: row.Name})
CREATE (l: Language {language: row.Language})
CREATE (d: Database {database: row.Database})
CREATE (n)-[:KNOWS]->(l)
CREATE (n)-[:WORKED_WITH]->(d)

这是我得到的以下输出:

仅针对 N2 个节点显示

由于我想建立一个推荐器,我的想法是将name链接到languagedatabase

预期输出:

我想以这种方式链接它,这样我就可以计算语言或数据库上的传入节点总数来推荐它。

谁能告诉我哪里出错了?

【问题讨论】:

    标签: csv graph neo4j cypher


    【解决方案1】:

    当您使用 CREATE 子句时,它每次都会创建新节点

    如果您想使用现有节点并仅在它不存在时创建,那么您需要使用 MERGE 子句而不是 CREATE.

    这是您使用 MERGE 进行的查询:

    LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
    MERGE (n:Name {name: row.Name})
    MERGE (l: Language {Language: row.Language})
    MERGE (d: Database {database: row.Database})
    MERGE (n)-[:KNOWS]->(l)
    MERGE (n)-[:WORKED_WITH]->(d)
    

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多