在neo4j中创建一对多关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在neo4j中创建一对多关系相关的知识,希望对你有一定的参考价值。
所以我对使用图形数据库非常新,我选择了neo4j。我正在尝试基于图形节点创建一个简单的推荐系统。
所以我的原始数据集是一个如下所示的CSV:
由于某些字段有分号,我将它们分开并将其解析为新的CSV。 (基本上是每个领域的组合)
新CSV看起来像这样:
上面的图像只显示N2,我也为N1和N3做了同样的事情。
现在,我需要以每种方式创建节点和关系
Name
知道Language
Name
WORKED_WITHDatabase
。
因此,我运行以下查询:
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
链接到language
和database
。
预期产量:
我想以这种方式链接它,以便我可以计算语言或数据库上的传入节点的总数来推荐它。
谁能告诉我哪里出错了?
答案
使用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)
以上是关于在neo4j中创建一对多关系的主要内容,如果未能解决你的问题,请参考以下文章