在neo4j中创建一对多关系

问题描述 投票:1回答:1

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

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

enter image description here

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

新CSV看起来像这样:

enter image description here

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

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

  • Name知道Language
  • Name WORKED_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)

这是我得到的以下输出:

enter image description here

仅显示N2节点

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

预期产量:

enter image description here

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

谁能告诉我哪里出错了?

csv graph neo4j cypher
1个回答
0
投票

使用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)
© www.soinside.com 2019 - 2024. All rights reserved.