py2neo中的索引错误,Neo4j

时间:2013-01-16 02:39:43

标签: neo4j py2neo

我对py2neo很新,所以我想我会从一个简单的程序开始。它返回一个TypeError:Index是不可迭代的。无论如何,我正在尝试添加一组节点,然后为它们创建关系,同时避免重复。不知道我做错了什么。

from py2neo import neo4j, cypher
graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")

happy = "happy"
glad = "glad"
mad = "mad"
irate = "irate"
love = "love"

wordindex = graph_db.get_or_create_index(neo4j.Node, "word")

for node in wordindex:
              wordindex.add("word", node["word"], node)


def createnodes(a, b, c, d, e):
nodes = wordindex.get_or_create(
    {"word": (a)},
    {"word": (b)},
    {"word": (c)},
    {"word": (d)},
    {"word": (e)},
    )

def createrel(a, b, c, d, e):
rels = wordindex.get_or_create(
    ((a), "is", (b)),
    ((c), "is", (d)),
    ((e), "is", (a)),
    )


createnodes(happy, glad, mad, irate, love)
createrel(happy, glad, mad, irate, love)

1 个答案:

答案 0 :(得分:2)

您在这里使用了许多方法,从Index.add方法开始。应该使用此方法将现有节点添加到索引中,但此时代码中没有实际创建节点。我认为您想要使用Index.get_or_create,如下所示:

nodes = []
for word in [happy, glad, mad, irate, love]:
    # get or create an entry in wordindex and append it to the `nodes` list
    nodes.append(wordindex.get_or_create("word", word, {"word": word}))

这基本上会替换您的createnodes函数,因为节点是通过索引直接创建的,保持唯一性。

然后,您可以使用上面的代码获得的节点对象以及GraphDatabaseService.get_or_create_relationships方法唯一地创建您的关系,如下所示:

graph_db.get_or_create_relationships(
    (nodes[0], "is", nodes[1]),
    (nodes[2], "is", nodes[3]),
    (nodes[4], "is", nodes[0]),
)

希望这有帮助