我有一个简单的大型 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/