py2neo:批量创建具有多个键:值对的索引节点

时间:2013-08-21 17:04:37

标签: neo4j py2neo

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

1 个答案:

答案 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代替。

感谢恭维: - )