2013-08-21 104 views
1

隨着py2neo:批量創建多個關鍵索引節點:值對

batch = neo4j.WriteBatch(graph_db) 
for n in nodes: 
    batch.create_indexed_node_or_fail(index, key, value, {node properties}) 
batch.submit() 

你可以很容易地在批量創建索引節點。

但是,如何在批處理中創建節點並同時添加多個鍵:值對?或者將節點添加到多個索引?我想到的

一個想法是先創建節點,然後將它們第二批添加到索引:

​​3210

但這似乎複雜。 Py2neo太棒了,必須有更簡單的方法。


基於薛明​​的回答,我想以此爲節點列表:

batch = neo4j.WriteBatch(graph_db) 
item_in_batch = 0 

for n in list_of_nodes: 
    batch.create(n) # this works, all nodes are created 
    batch.add_indexed_node("people", "key", "value from n", item_in_batch) 
    batch.add_indexed_node("people", "key2", "other value from n", item_in_batch) 
    i += 1 
batch.submit() 

一些節點在我的指數結束了,但不是全部。當我搜索('key:value-from-n')索引時,它會返回一個節點,但不是正確的。當我嘗試將索引添加到索引時,如何訪問節點的「內部」ID?


我試過(目前正在測試)版本py2neo的1.6.0和它的作品!

n = batch.create(node) 

現在返回可在該批次中被用來指節點的請求對象。

一個例子是在docs for 1.6.0

回答

2

你不應該需要兩批。您應該可以創建並添加同一批次。喜歡的東西:

batch = neo4j.WriteBatch(graph_db) 
batch.create({"name": "Alice}) 
batch.add_indexed_node("people", "name", "Alice", 0) 
batch.add_indexed_node("employees", "id", 2345678, 0) 
batch.add_indexed_node("fighter_pilots", "call_sign", "Silver Eagle", 0) 
batch.submit() 

對於唯一索引,那麼您可以使用add_indexed_node_or_fail代替。

感謝您的讚揚:-)

+0

感謝Nigel!我會嘗試的。我有點不明白爲什麼我可以用'0'來引用最後一個節點。它會在neo4j中有另一個ID,對吧?如果batch.create()和batch.add_indexed_node()在一個循環中並在創建幾百個節點後提交,這也可以工作嗎?我想我需要看看你的代碼,試着更好地理解這個:) –

+0

零並不是指由服務器創建的節點ID,它指的是該批中的第零個項目,在這種情況下是新的創建節點。 –

+0

這適用於單節點,但如果我在批次中創建更多節點,則不適用。我認爲它不會在迭代時引用批處理中的正確項目。我編輯我的問題與代碼,任何幫助將不勝感激;) –