为什么batch.set_labels()适用于batch.create(),但不适用于batch.get_or_create_indexed_node()
这样可行,节点按预期创建。
batch = neo4j.WriteBatch(neo4j_graph)
a = batch.create(node({'name': 'a'}))
batch.set_labels(a, 'Person')
batch.submit()
这不起作用,没有创建节点。
graph_db.get_or_create_index(neo4j.Node, 'node_index')
batch = neo4j.WriteBatch(neo4j_graph)
b = batch.get_or_create_indexed_node(NEO4J_NODE_INDEX, 'name',
'b',
{'name': 'b'}
)
batch.set_labels(b, 'Person')
batch.submit()
答案 0 :(得分:0)
这是批处理端点和其他资源通过REST接口工作的方式的限制,并且需要熟悉REST API才能完全理解。
批处理端点将多个HTTP请求捆绑到一次调用中,该调用在单个事务中执行。从这些请求返回的值之一是location
URI,在某些情况下,这可以传递到其他请求中。例如,可能想要创建两个节点,然后创建连接它们的关系。这可以通过使用诸如{0}
和{1}
之类的指针来引用先前创建的节点作为新关系的端点来实现。有关此表示法的更多详细信息,请参阅here。
使用旧版索引调用时遇到了困难。当node is created通过旧索引时,返回的location
URI是索引入口点的URI,而不是新创建的节点。这不能用作参考(例如在上面的set_labels
调用中),因此不会发生预期的行为。
不幸的是,没有直接的解决方法。您可以转到Cypher,但无法在那里写入旧索引。也许您可以为此查看模式索引?