Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将关系从CSV导入Neo4J-无法创建多个关系_Csv_Neo4j_Cypher - Fatal编程技术网

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

将关系从CSV导入Neo4J-无法创建多个关系,csv,neo4j,cypher,Csv,Neo4j,Cypher,我有一个简单、大的CSV文件,没有标题,结构如下: 名字1,名字2 名字3,名字4 名字2,名字4 ... 我正在尝试将其全部导入Neo4J,同时创建关系。首先,我添加了约束在(u:User)ASSERT u上创建约束。名称是唯一的,然后我运行: USING PERIODIC COMMIT LOAD CSV FROM '${file}' AS line WITH line LIMIT 50000 MERGE (u:User {name: line[0]})-[:connected_to]-&

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


名字1,名字2
名字3,名字4
名字2,名字4
...

我正在尝试将其全部导入Neo4J,同时创建关系。首先,我添加了约束
在(u:User)ASSERT u上创建约束。名称是唯一的
,然后我运行:

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”。

您需要先分别创建条目<代码>合并将确保创建整个模式。因此,您只能获得与文件的每一行匹配的对

如果
合并
行中的每个名称,然后
合并
关系,您将获得所需的连接图。请注意,关系合并是无方向的。这将确保在两个特定节点之间仅创建一个关系,而不考虑文件中的顺序或出现的次数

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)
如果包含与此类似的条目的数据以不同的顺序重复,并且希望在两个方向上创建关系,则可以使关系合并定向

...
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)

目前的答案中有一个微妙的错误。最后一次合并不应指定关系的方向,否则它可能会在同一对节点之间创建两个关系(每个方向一个)。只需将
->
更改为
-
合并
将不会创建任何方向上已经存在的关系。但我尝试了这个答案,但似乎仍然不起作用。在验证我的文件中至少提到了2000次某个名称(“john”)之后,我执行了
MATCH(u1:User{name:'john'})-[:connected_to]-(u2:User)返回u1,u2
,结果一直是空的。我的节点在图中仍然成对连接。如果您希望避免在同一2个节点之间有时出现两个关系,则需要进行更改。对于您的另一个问题:在运行答案之前是否清空了数据库?如果您这样做了,那么应该只有一个“john”节点。我确实清空了它。我有一个“john”,但只有一个节点连接到它-与我的原始版本相同。我认为您需要显示出现问题的输入数据的示例。您是否有一小段数据可以说明问题?@DaveBennett创建起来很容易:只需取4个名称,并在其中一个节点中随机重复其中一个名称创建配对的两列:john、jake/john、mike/david、john/amy、john等。即使有了这个示例,我也只得到了连接的配对…这很公平。我创建了一个小样本,在我的答案中使用了这个查询,它创建了一个
john
节点,并附加了所有其他节点。我确实为名称匹配中的每个名称添加了
trim()
,因此如果确实有逗号,它将删除逗号后的前导空格。@DaveBennett好的,现在我尝试使用一个小文件,您的代码工作得非常好!我猜我在导入更大的文件时遇到了一些问题。我会试着做一些原木跳水,但你的答案是有效的。谢谢你的帮助!