gpt4 book ai didi

python - 使用py2neo时在节点之间创建批量关系时出现异常

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:15 33 4
gpt4 key购买 nike

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

  • 为每个城市创建一个节点。该节点存储城市名称和与其关联的唯一 ID。
  • 为每个机场创建一个节点。机场节点存储机场名称和唯一的 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()

然后在另一个单独的模块中,我尝试创建机场节点以及机场节点和相应城市节点之间的关系,如下所示:

read_batch = neo4j.ReadBatch(graph_db)
write_batch = neo4j.WriteBatch(graph_db)
for airport_id, city_id, airport_name in <some_list>:
airport_node_id = write_batch.create(node(airport_id=airport_id, city_id=city_id, name=airport_name))
write_batch.add_indexed_node('airport_index','airport_id',airport_id, airport_node_id)
city_node_id = read_batch.get_indexed_nodes('city_index','city_id',city_id)
rel_id = write_batch.create(rel(airport_node_id, "is in city", city_node_id))
write_batch.add_indexed_relationship('airport_rel_index','airport_id',airport_id, rel_id)
write_batch.submit()

我创建关系的最后一条语句抛出异常:

rel_id = write_batch.create(rel(airport_node_id, "is in city", city_node_id))
File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 2695, in create
"to": self._uri_for(entity.end_node)
File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 2537, in _uri_for
uri = "{{{0}}}".format(self.find(resource))
File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 2528, in find
raise ValueError("Request not found")
ValueError: Request not found

我尝试打印两种类型节点的 uri。他们的区别是:

print station_node_id._uri, city_node_id._uri

输出:

node index/node/city_index/city_id/2536650

所以两个节点的 uri 不同,这就是为什么我猜想没有创建关系。

我可以使用什么函数来返回城市的未 inode ,即 uri 应该只是“node”而不是“index/node/city_index/city_id/”。

还有其他方法可以建立这种关系吗?

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

Neo4j:1.9.5

py2neo:1.6.1

最佳答案

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

这里讨论了类似的问题 - https://github.com/nigelsmall/py2neo/issues/221 - 不幸的是我在客户端无能为力。

您唯一真正的选择是将您的工作分成多个批处理,或者 - 如果您能够这样做 - 考虑升级到 Neo4j 2.0,您可以在其中使用新的标签和架构索引功能。

关于python - 使用py2neo时在节点之间创建批量关系时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20653677/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com