csv - 将关系从 CSV 导入 Neo4J - 无法创建多个关系

标签 csv neo4j cypher

我有一个简单的大型 CSV 文件,没有标题,结构如下:

姓名1、姓名2 姓名 3、姓名 4 姓名2、姓名4 ...

我正在尝试将其全部导入 Neo4J 并同时创建关系。首先,我添加了约束 CREATE CONSTRAINT ON (u:User) ASSERT u.name IS UNIQUE 然后我运行:

USING PERIODIC COMMIT
LOAD CSV FROM '${file}' AS line
WITH line LIMIT 50000
MERGE (u:User {name: line[0]})-[:connected_to]->(q:User {name: line[1]})

我得到的图只是连接对。我找不到具有多个关系的单个节点(即使许多节点在左列和右列中出现多次)。另外,我预计会看到一些集群。

显然我的插入操作有问题。我假设我可以运行该文件两次并创建所有节点,然后创建所有关系,但我觉得我缺少一些可以在一次操作中完成所有操作的简单东西。

更正:其中一个属性名称为“number” - 它们都是“name”。

最佳答案

您需要首先单独创建条目。 MERGE 将确保创建整个模式。因此,您只能得到与文件的每一行匹配的对。

如果您首先MERGE行中的每个名称,然后MERGE之后的关系,您将获得您想要的连接图。请注意,MERGE 关系是无向的。这将确保在两个特定节点之间仅创建单个关系,无论文件中的顺序或出现的次数如何。

USING PERIODIC COMMIT
LOAD CSV FROM '${file}' AS line
WITH line LIMIT 50000
MERGE (u:User {name: trim(line[0])} )
MERGE (q:User {name: trim(line[1])} )
MERGE (u)-[:connected_to]-(q)

如果数据包含与此类似的条目,其中它们以不同的顺序重复,并且希望在两个方向上创建关系,那么您可以将关系设为 MERGE 定向

...
name1, name2
name2, name1
...

如下例所示

USING PERIODIC COMMIT
LOAD CSV FROM '${file}' AS line
WITH line LIMIT 50000
MERGE (u:User {name: trim(line[0])} )
MERGE (q:User {name: trim(line[1])} )
MERGE (u)-[:connected_to]->(q)

关于csv - 将关系从 CSV 导入 Neo4J - 无法创建多个关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49807010/

相关文章:

Linux 将 csv 中的 ^M$ 替换为 $

javascript - 使用 d3.js 将 CSV 解析为 HTML 表时出现问题

neo4j - 如何在 Neo4j 中使用单个查询删除所有子节点和关系。?

Neo4j : Find children derived from same parents in cypher

neo4j - 如何计算属性之间的差异和百分位数?

neo4j - 如何在单个查询中删除层次结构下的节点

python - 将分类数据从 CSV 加载到 Scikit-Learn 以进行机器学习

c# - 为什么 ReadAllLines 在 WPF 中有效但在 ConsoleApp 中无效

neo4j - 在 Neo4j 中,可以找到其关系是另一节点关系超集的所有节点吗?

c# - Neo4J 是否有任何 .NET 绑定(bind)?