2013-01-16 69 views
0

我是py2neo的全新品牌,所以我想我會從一個簡單的程序開始。它返回一個TypeError:Index是不可迭代的。無論如何,我試圖添加一組節點,然後爲它們創建關係,同時避免重複。不知道我做錯了什麼。py2neo中的索引錯誤,Neo4j

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) 

回答

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

希望這有助於

奈傑爾

+0

感謝薛明,很有幫助!我也發現你在幻燈片上的演示文稿也很有用 –