1

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 太神奇了,一定有更简单的方法。


根据奈杰尔的回答,我尝试了这个节点列表:

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)

现在返回一个请求对象,该对象可以在批处理中用于引用节点。

1.6.0的文档中有一个示例

4

1 回答 1

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改用。

并感谢您的赞美:-)

于 2013-08-21T19:30:44.247 回答