1

我已经使用批量导入器在 neo4j 图形数据库中加载了一些数据。现在让我们说,如果我必须加载更多数据,那么我是否必须跟踪外部插入的内容,或者 Neo4j 的标准功能可用于:

1)获取插入的最后一个节点的ID,以便我知道需要插入的新节点的ID并相应地索引。

2)获取数据库中已经存在的节点列表,以便我可以检查将要插入的节点的唯一性。如果数据库中已经存在一个节点,我将只使用相同的 id 而不会创建新节点。

3) 检查三元组的唯一性 - 假设 neo4j 数据库中已经存在一个三元组“January Month is_a”,假设我要插入的新数据也有相同的三元组,我不想插入它,因为它会给我重复的结果。

例如:如果您使用批处理导入器在 neo4j 图形数据库中添加以下数据:https ://github.com/jexp/batch-import

$ cat nodes.csv
name age works_on
Michael 37 neo4j
Selina 14
Rana 6
Selma 4

$ cat nodes_index.csv
0 name age works_on
1 Michael 37 neo4j
2 Selina 14
3 Rana 6
4 Selma 4

$ cat rels.csv
start end type since counter:int
1 2 FATHER_OF 1998-07-10 1
1 3 FATHER_OF 2007-09-15 2
1 4 FATHER_OF 2008-05-03 3
3 4 SISTER_OF 2008-05-03 5
2 3 SISTER_OF 2007-09-15 7

现在,如果您必须向同一个数据库添加更多数据,那么您需要了解以下内容:

1)如果节点已经存在,那么它们的 id 是什么,以便您可以在创建三元组时使用它们,如果没有,则创建此类节点的列表(不在数据库中),然后从上次导入中未使用的 id 开始并将其用作创建新 nodes_index.csv 的起始 id

2)如果数据库中已经存在三元组,则不要再次创建该三元组,因为在对数据库运行密码查询时会导致重复结果。

似乎这里也提出了同样的问题:https ://github.com/jexp/batch-import/issues/27

谢谢!

4

1 回答 1

0

1-为什么你需要知道最后一个节点 id ..你不需要知道 id 来插入新节点,它将自动添加到图中的第一个空闲 id

2-为了唯一性,为什么你不使用创建唯一查询“也用于节点和关系”

在这里您可以查看参考资料:http ://docs.neo4j.org/chunked/1.8/cypher-query-lang.html

于 2013-03-26T20:22:52.810 回答