在neo4j中创建一对多关系

时间:2019-02-26 10:40:00

标签: csv graph neo4j cypher

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

所以我有原始的CSV数据集,如下所示:

enter image description here

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

新的CSV如下:

enter image description here

  

上图仅显示了N2,我也对N1和N3做过同样的事情。

现在,我需要以每种方式创建节点和关系

  • Name知道Language
  • Name起作用了,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)

这是我得到的以下输出:

enter image description here

  

仅针对N2个节点显示

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

预期输出:

enter image description here

  

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

有人可以告诉我我要去哪里了吗

1 个答案:

答案 0 :(得分:0)

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

如果要使用现有节点并仅在不存在的节点上创建,则需要使用 MERGE 子句而不是创建 >。

这是您对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)