0

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

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)
4

1 回答 1

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]),
)

希望这可以帮助

奈杰尔

于 2013-01-16T09:45:37.183 回答