java - 如何有效地在neo4j中创建具有关系的非重复节点?

标签 java neo4j

我需要创建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/

相关文章:

java - 图数据库 (neo4j) 与关系数据库。在设计方面需要帮助

neo4j - 如何在neo4j中按功能使用分组?

java - Spring 数据 Neo4j : How do I pull a list of nodes of which I do not know the type?

java - Mapreduce用于图像分类

java - 来自 Callable 而不是 Runnable 的新线程?

java - 在 Java 中从 rgb 字符串创建颜色

python - 从 MySQL 插入 Neo4j 的大数据集

neo4j - 调用过程 `apoc.load.csv` : Caused by: java. io.IOException : Cannot open file test. csv 读取失败

java - 提取特定行java

java - for循环这是什么意思?