Я начал работать с Node4j и немного изучал пакетную обработку, но, к сожалению, у меня возникли проблемы с созданием отношений между узлами.
Моя проблема заключается в следующем. У меня есть список веб-сайтов и пользователей, которых я читаю из файла. У меня могут быть повторяющиеся веб-сайты и пользователи в этом файле, поэтому я не хочу вставлять новые узлы для этих повторяющихся записей. Но поскольку файл большой, я хочу пакетно обрабатывать узлы и отношения.
По сути, у меня есть эти две функции для создания узлов и отношений и добавления их в пакет.
graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
batch = neo4j.WriteBatch(graph_db)
def create_node(pvalue, svalue, type):
return batch.create({\
"pkey" : pvalue,
"skey" : svalue,
"type" : type
}
)
def create_rel(from_node, type_label, to_node, fields):
properties =\
{"ACCT_KEY": fields.ACCT_KEY}
relation = rel(from_node, type_label, to_node, **properties)
batch.create(relation)
Затем, после использования словаря, чтобы убедиться, что я не создал узлы раньше, я делаю:
node1 = create_node("ATTRIBUTE_1", "ATTRIBUTE_2", "WEBSITE")
node2 = create_node("ATTRIBUTE_3", "ATTRIBUTE_4", "USER")
create_rel(node1, "VISITED_BY", node2, fields)
Я сохраняю ссылки на «узел1» и «узел2» в словаре, поэтому, когда я хочу создать отношение с участием веб-сайта или уже зарегистрированного пользователя, я не буду создавать узел снова, а буду использовать непосредственно ссылку. Я делаю это внутри цикла, и он работает нормально, пока я не решу сделать это после определенного количества итераций:
batch.submit()
batch.clear()
Когда я решаю использовать эти ссылки из предыдущих пакетов, я получаю следующую ошибку:
Traceback (most recent call last):
File "main.py", line 102, in <module>
create_rel(cardholder, fraud_label, merchant,fields)
File "main.py", line 33, in create_rel
batch.create(relation)
File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 2775, in create
"to": self._uri_for(entity.end_node)
File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 2613, in _uri_for
uri = "{{{0}}}".format(self.find(resource))
File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 2604, in find
raise ValueError("Request not found")
ValueError: Request not found
Я считаю, что это происходит потому, что он каким-то образом теряет ссылки из предыдущих партий, и они больше не действительны. Я попытался собрать идентификаторы с узлов и использовать их вместо этого, но не могу найти, как это сделать. Любая помощь будет оценена, спасибо.
Моя версия Node4j — «версия сообщества 2.0.3 для Unix», а версия py2neo — 1.6.4.