Узлы повторяются, когда я использую Neo4j и py2neo - PullRequest
0 голосов
/ 07 мая 2020

У меня есть список, в котором есть повторяющиеся элементы. например tag_data = ['a', 'b', 'c', 'd', 'c', 'a', 'f', 'b', 'a'] et c. ... Теперь мне нужно использовать базу данных neo4j и py2neo для хранения этих элементов списка. Итак, я попробовал

graph = Graph("http://......./db/data")
graph.schema.create_uniqueness_constraint('Zigzag', 'tagName')
for i,tags in enumerate(tag_data):
    var_tag = "tag"+str(i)
    var_tag = Node("Zigzag",tagName=tags)
    graph.create(var_tag)

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

Я сослался на некоторые ссылки в stackoverflow, и я попробовал сопоставить и объединить, которые также не работают

for i,tags in enumerate(tag_data):
    var_tag = "tag"+str(i)
    print(var_tag)
    matcher = NodeMatcher(graph)
    m = matcher.match("Zigzag",tags).first()
    print(m,"hi")
    if m is None:
        var_tag = Node("Zigzag",tagName=tags)
        graph.create(var_tag)

с merge

for i,tags in enumerate(tag_data):
    var_tag = "tag"+str(i)
    print(var_tag)                
    graph.merge("Zigzag","tagName",tags)

Как мне создать уникальные узлы в neo4j (4.0.3) и py2neo.

1 Ответ

1 голос
/ 18 мая 2020

Предполагая, что теги помечены только своим именем, вот рабочий пример с использованием graph.merge из py2neo:

from py2neo import Graph, Node

graph = Graph("....")

tags = ['a','b','c','d','c','a','f','b','a']
for tag in tags:
    n = Node("Zigzag", tagName=tag)  # create node object
    graph.merge(n, "Zigzag", "tagName")  # merge node into graph using Zigzag as primary label and tagName property as primary key

Итак, если узел с меткой «Zigzag» и тем же свойством «tagName» уже существует, он не будет создан снова, иначе будет создан узел.

Если вы добавите печать в конце l oop:

print(tag, n)

Вы получите убедитесь, что все узлы с одинаковым "tagName" имеют одинаковый идентификатор:

a (_4:Zigzag {tagName: 'a'})
b (_5:Zigzag {tagName: 'b'})
c (_6:Zigzag {tagName: 'c'})
d (_7:Zigzag {tagName: 'd'})
c (_6:Zigzag {tagName: 'c'})
a (_4:Zigzag {tagName: 'a'})
f (_8:Zigzag {tagName: 'f'})
b (_5:Zigzag {tagName: 'b'})
a (_4:Zigzag {tagName: 'a'})
...