我需要创建50,000个节点(:Person
)与50个节点(:office
)有某种关系,保证:office
> 元素没有重复元素,但是 :Person
有。
我的代码是这样的:
CREATE INDEX ON :office(rc)
CREATE INDEX ON :Person(numDoc)
USING PERIODIC COMMIT 500 LOAD CSV FROM
"file:///path/to/file" AS csvLine
MATCH (x:office{ rc:"345421"})
MERGE (n:Person { numDoc: toint(csvLine[1]) })
CREATE (n) -[:Afil]-> (x)
它确实有效,但需要花费很多时间(大约 2 小时)。我想知道进行此查询的有效方法
最佳答案
请确保拼写/大小写一致。 尝试使用 Neo4j 2.3.0
CREATE INDEX ON :Office(rc);
CREATE INDEX ON :Person(numDoc);
// make sure the indexes are online
:schema await
MATCH (x:Office{ rc:"345421"})
LOAD CSV FROM "file:///path/to/file" AS csvLine
MERGE (n:Person { numDoc: toInt(csvLine[1]) })
CREATE (n) -[:Afil]-> (x);
如果您只创建 5 万人和 5 万个关系,则不需要定期提交。然后您可以预先匹配一次办公室,而不是每一行。
如果查询使用了您创建的索引,您可以通过在查询前面添加 EXPLAIN 来检查它。
关于java - 如何有效地在neo4j中创建具有关系的非重复节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33497242/