Как объединить узлы и отношения, используя py2neo v4 и Neo4j - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь выполнить базовую операцию слияния, чтобы добавить несуществующие узлы и отношения к моему графику, просматривая файл CSV строка за строкой.Я использую py2neo v4, и потому что в основном нет документации или примеров того, как использовать py2neo, я не могу понять, как на самом деле это сделать.Это не мой настоящий код (очень сложно обрабатывать много разных случаев), но его структура в основном выглядит следующим образом:

import py2neo as pn
graph = pn.Graph("bolt://localhost:###/", user="neo4j", password="py2neoSux")
matcher = pn.NodeMatcher(graph)
tx = graph.begin()

if (matcher.match("Prefecture", name="foo").first()) == None):
  previousNode = pn.Node("Type1", name="fo0", yc=1)
else:
  previousNode = matcher.match("Prefecture", name="foo").first())

thisNode = pn.Node("Type2", name="bar", yc=1)
tx.merge(previousNode)  
tx.merge(thisNode)  
theLink = pn.Relationship(thisNode, "PARTOF", previousNode)
tx.merge(theLink)
tx.commit() 

В настоящее время это выдает ошибку ValueError: Primary label and primary key are required for MERGE operation при первом слиянииузел, который он не нашел (т. е. при создании узла).Затем я изменяю строку на:

tx.merge(thisNode,primary_label=list(thisNode.labels)[0], primary_key="name")  

, что дает мне ошибку IndexError: list index out of range где-то глубоко в исходном коде py2neo (.... site-packages \ py2neo \ internal \ operations.py ", строка 168, в merge_subgraph на node = nodes[i]). Я пытался выяснить, что там происходит не так, но я не мог понять, откуда появляется список nodes через различные соединения с другими командами.

Таким образом, в настоящее время он сопоставляет и создает несколько узлов без проблем, но в какой-то момент он будет сопоставляться до тех пор, пока ему не понадобится создать, а затем не сможет создать этот узел (даже если он использует тот же код и делает то же самое вте же обстоятельства в цикле.) Он прошел через все 20 строк в моем примере один раз, но обычно останавливается на строке 3-5.

Я думал, что это как-то связано с транзакциями (см. комментарии),но я получаю ту же проблему при слиянии непосредственно на графике. Может быть, это связано с функцией слияния py2neo, которая находит больше идентификаторов для узлов, чем для узлов.что-то не так с тем, как я указал свой основной ярлык и / или ключ.Поскольку эта ошибка и код непрозрачны, я не знаю, как двигаться дальше.

У кого-нибудь есть какие-либо советы или инструкции по слиянию узлов с py2neo?

Конечно, я хотел бы знать, как исправить мою текущую проблему, но в целом я хотел бы узнать, как использовать этот пакет.Примеры, инструкции, настоящая документация?

1 Ответ

0 голосов
/ 09 января 2019

У меня похожая проблема, и я только что закончила рвать на себе волосы, чтобы понять, что случилось!ТАК!Что я узнал, так это, по крайней мере, в моем случае ... и, возможно, у вас тоже, так как мы получили похожие сообщения об ошибках и делали подобные вещи.Проблема заключалась в том, что я пытался создать Node с полем __primarykey__, имя которого отличалось от имени другого.

ПРИМЕР ПСЕВДО:

# in some for loop or complex code
node = Node("Example", name="Test",something="else")
node.__primarykey__ = "name"
<code merging or otherwise creating the node>

# later on in the loop you might have done something like this cause the field was null
node = Node("Example", something="new")
node.__primarykey__ = "something"

Надеюсь, это поможет и было ясно, что я все еще поправляюсь от того, что обернул голову вокруг вещей.Если не ясно, дайте мне знать, и я пересмотрю.

Удачи.

...