Импорт файла иерархических данных CSV в Neo4j.py - PullRequest
2 голосов
/ 07 сентября 2010

Мне интересно, есть ли скрипт Python для импорта файла иерархических данных CSV в neo4j.py.

Я сделал приведенный ниже скрипт на python, но мне нужен лучший способ проверить, создан ли узел уже перед его созданием.

graphdb = neo4j.GraphDatabase(lparam_database_path, classpath=lparam_kernel_class_path, jvm=lparam_jvm_path, heap_size=ls_jvm_heap_size)

with graphdb.transaction:
    sectornode = Subreference.Node.SECTOR_ROOT(graphdb, label="Sectors", level=1)
    categorynode = graphdb.node(label="Categories", level=2)
    productnode = graphdb.node(label="Products", level=3)
    brandnode = graphdb.node(label="Brands", level=4)
    subbrandnode = graphdb.node(label="Subbrands", level=5)

    relationship1 = sectornode.CATEGORY_ROOT(categorynode)
    relationship2 = categorynode.PRODUCT_ROOT(productnode)
    relationship3 = productnode.BRAND_ROOT(brandnode)
    relationship4 = brandnode.SUBBRAND_ROOT(subbrandnode)

    li_index = 0
    ls_last_sector = ""
    ls_last_category = ""
    ls_last_product = ""
    ls_last_brand = ""
    ls_last_subbrand = ""
    for data in data_list:
        li_index = li_index + 1
        print "importing row " + str(li_index) + " of " + str(li_total_rows)

        if data[0] != ls_last_sector:
            tempsectornode = graphdb.node(label=data[0])
            lastsectornode = tempsectornode
        if data[1] != ls_last_category or data[0] != ls_last_sector:
            tempcategorynode = graphdb.node(label=data[1])
            lastcategorynode = tempcategorynode
        if data[2] != ls_last_product or data[1] != ls_last_category or data[0] != ls_last_sector:
            tempproductnode = graphdb.node(label=data[2])
            lastproductnode = tempproductnode
        if data[3] != ls_last_brand or data[2] != ls_last_product or data[1] != ls_last_category or data[0] != ls_last_sector:
            tempbrandnode = graphdb.node(label=data[3])
            lastbrandnode = tempbrandnode
        if data[4] != ls_last_subbrand or data[3] != ls_last_brand or data[2] != ls_last_product or data[1] != ls_last_category or data[0] != ls_last_sector:
            tempsubbrandnode = graphdb.node(label=data[4])
            lastsubbrandnode = tempsubbrandnode

        temprelationship1 = tempsectornode.OFTYPE(sectornode)
        temprelationship2 = tempcategorynode.OFTYPE(categorynode)
        temprelationship3 = tempproductnode.OFTYPE(productnode)
        temprelationship4 = tempbrandnode.OFTYPE(brandnode)
        temprelationship5 = tempsubbrandnode.OFTYPE(subbrandnode)

        temprelationship6 = tempcategorynode.MEMBEROF(tempsectornode)
        temprelationship7 = tempproductnode.MEMBEROF(tempcategorynode)
        temprelationship8 = tempbrandnode.MEMBEROF(tempproductnode)
        temprelationship9 = tempsubbrandnode.MEMBEROF(tempbrandnode)

        ls_last_sector = data[0]
        ls_last_category = data[1]
        ls_last_product = data[2]
        ls_last_brand = data[3]
        ls_last_subbrand = data[4]

graphdb.shutdown()

1 Ответ

1 голос
/ 02 мая 2011

Вы должны быть в состоянии проиндексировать узел после создания и затем проверить через API индекса, если он уже существует.У меня нет neo4j.py API под рукой, но он должен предоставлять эту функциональность.

Принцип подхода (в Java):

graphDatabase.index().forNodes("index-name");
index.add(node, "key","value");

Node node=index.get("key","value").getSingle();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...