Neo4j py2neo set_标签不使用get_或_create_索引_节点

Neo4j py2neo set_标签不使用get_或_create_索引_节点,neo4j,py2neo,Neo4j,Py2neo,为什么batch.set_labels()与batch.create()一起工作,而与batch.get_或_create_indexed_node()不一起工作 如果这样做,则会按预期创建一个节点 batch = neo4j.WriteBatch(neo4j_graph) a = batch.create(node({'name': 'a'})) batch.set_labels(a, 'Person') batch.submit() 这不起作用,未创建任何节点 graph_db.get_o

为什么batch.set_labels()与batch.create()一起工作,而与batch.get_或_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()

这是批处理端点和其他资源通过REST接口工作方式的一个限制,需要对RESTAPI有一定的了解才能完全理解

批处理端点将多个HTTP请求捆绑到单个事务中执行的单个调用中。从这些请求返回的值之一是
位置
URI,在某些情况下可以传递到其他请求中。例如,可能需要创建两个节点,然后创建连接它们的关系。这可以通过使用诸如
{0}
{1}
之类的指针来引用以前创建为新关系端点的节点来实现。有关此符号的更多详细信息,请参阅

使用传统索引调用时会遇到困难。通过旧索引时,返回的
位置
URI是索引入口点的URI,而不是新创建的节点的URI。这不能用作参考(例如在上面的
set_labels
调用中),因此不会出现预期的行为

不幸的是,没有直接的解决方法。您可以转到Cypher,但无法在那里写入遗留索引。也许您可以看看这个的模式索引