2013-03-26 77 views
1

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

1)获取插入的最后一个节点的ID我知道需要插入和索引的新节点的ID。

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

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

例如:如果您添加以下使用批量进口国的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

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

好像同样的问题已经在这里提出,以及:https://github.com/jexp/batch-import/issues/27

谢谢!

回答

0

1 - 为什么你需要知道的最后一个节点ID ..你不需要知道ID插入它会在第一次自由ID自动添加在图

2-唯一性的新节点,为什么你不使用创建独特的查询“节点和关系以及”

在这里你可以检查参考:http://docs.neo4j.org/chunked/1.8/cypher-query-lang.html