Python 使用py2neo时在节点之间创建批处理关系时出现异常

Python 使用py2neo时在节点之间创建批处理关系时出现异常,python,neo4j,py2neo,Python,Neo4j,Py2neo,我使用py2neo创建了一个图形数据库,目的是: 为每个城市创建一个节点。该节点存储城市名称和与其关联的唯一id 为每个机场创建一个节点。airport节点存储机场名称和唯一id 如果机场位于城市中,则在城市节点和机场节点之间创建关系 我使用此模块首先(成功)创建了城市节点: batch = neo4j.WriteBatch(graph_db) for city_id,city_name in <some_list>: city_node_id = batch.

我使用py2neo创建了一个图形数据库,目的是:

  • 为每个城市创建一个节点。该节点存储城市名称和与其关联的唯一id
  • 为每个机场创建一个节点。airport节点存储机场名称和唯一id
  • 如果机场位于城市中,则在城市节点和机场节点之间创建关系
我使用此模块首先(成功)创建了城市节点:

batch = neo4j.WriteBatch(graph_db)    
for city_id,city_name in <some_list>:
     city_node_id = batch.create(node(city_id=city_id, name=city_name))
     batch.add_indexed_node('city_index','city_id',city_id, city_node_id)
batch.submit()
我试图打印这两种节点类型的uri。他们的观点是不同的:

print station_node_id._uri, city_node_id._uri
输出:

node index/node/city_index/city_id/2536650
因此,两个节点的URI都是不同的,这就是为什么我猜没有创建关系的原因

我可以使用什么函数返回城市的未索引节点,即uri应该只是“节点”,而不是“索引/节点/城市索引/城市id/”

有没有其他方法来建立这种关系

如果需要,我很乐意提供任何其他信息。 提前谢谢

Neo4j:1.9.5


py2neo:1.6.1

您看到的是一个不幸的服务器限制,一些REST调用返回的位置URI包含一个节点索引条目URI,而不是标准节点URI。不幸的是,这只在少数用例中有用,在像您这样的用例中是一个主要限制

这里讨论了一个类似的问题——不幸的是,我在客户端无能为力


你唯一的选择是将你的工作分成多个批次,或者如果你能做到这一点——考虑升级到NeN4J 2,在那里你可以使用新的标签和模式索引能力。< /P>我升级到NeN4J 2,但是问题仍然存在。在我的例子中,即使我在不同的批次中执行第二个模块,问题也无法解决,因为当给定city_id时,我需要的是node_id。无论我做什么,使用city_索引返回的节点id总是索引的id,而不是原始节点的id。我有什么遗漏吗?谢谢奈杰尔!我甚至尝试使用单独的批处理在图中创建关系,但即使这样也不起作用。WriteBatch方法返回的批处理请求只是返回值的占位符,而不是返回值本身。如果从

submit
调用中收集结果,您将找到创建的节点。然后,您可以在后续批处理中使用它们来创建关系。
print station_node_id._uri, city_node_id._uri
node index/node/city_index/city_id/2536650