用
batch = neo4j.WriteBatch(graph_db)
for n in nodes:
batch.create_indexed_node_or_fail(index, key, value, {node properties})
batch.submit()
您可以轻松地批量创建索引节点。
但是如何在批处理中创建节点并同时添加多个键:值对?或者将节点添加到多个索引?
我想到的一个想法是首先创建节点,然后在第二批中将它们添加到索引中:
for n in nodes:
batch.create({node properties})
results = batch.submit()
for r in results:
batch add node to index1
batch add node to index2
batch.submit()
但这似乎很复杂。 Py2neo太棒了,必须有一个更简单的方法。
根据Nigel的回答,我尝试了这个节点列表:
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? / p>
我尝试了(当前正在测试)版本1.6.0的py2neo并且它有效!
n = batch.create(node)
现在返回一个请求对象,该对象可以在批处理中用于引用该节点。
一个例子是docs for 1.6.0
答案 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
代替。
感谢恭维: - )