я создал базу данных с помощью графа py2neo и цель:Исключения при создании пакетного отношения между узлами при использовании py2neo
- Создать один узел для каждого города. В узле хранится название города и уникальный идентификатор, связанный с ним.
- Создайте один узел для каждого аэропорта. Узел аэропорта хранит название аэропорта и снова уникальный идентификатор.
- Создайте связь между узлом города и узлом аэропорта, если аэропорт находится в этом городе.
Я создал город узлы первого (успешно) с помощью этого модуля:
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()
3-заявление от последнего, в котором я творю отношения бросает исключение:
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
Так URIs обоего узлов различен, поэтому я предполагаю, что отношения не получают созданы.
Какую функцию я могу использовать, которая возвращает неиндексированный узел для города, то есть uri должен быть просто «узлом» вместо «index/node/city_index/ city_id /».
Есть ли другой способ создать отношения?
Я был бы рад предоставить любую другую информацию, если потребуется. Спасибо заранее!
Neo4j: 1.9.5
py2neo: 1.6.1
Я обновился до версии neo4j 2.0, но проблема все еще сохраняется. В моем случае проблема не может быть решена, даже если я делаю второй модуль в разных партиях, потому что мне нужно ** node_id ** при предоставлении ** city_id **. И независимо от того, что я делаю, идентификатор узла, возвращаемый с использованием ** city_index **, всегда относится к индексу, а не к исходному узлу. Есть что-то, чего я не хватает? Спасибо, Найджел! – VineetChirania
Я даже пытался использовать отдельную партию для создания связей в графе, но даже это не сработало. – VineetChirania
BatchRequests, возвращаемые методами WriteBatch, являются просто заполнителями для возвращаемых значений, а не самими значениями возврата. Если вы соберете результаты вызова 'submit', вы найдете созданные узлы. Затем вы можете использовать их в последующей партии для создания отношений. –