2014-10-05 58 views
0

爲什麼batch.set_labels()與batch.create工作(),但與batch.get_or_create_indexed_node()py2neo set_labels

這工作,如預期的那樣創建一個節點。

batch = neo4j.WriteBatch(neo4j_graph) 
a = batch.create(node({'name': 'a'})) 
batch.set_labels(a, 'Person') 
batch.submit() 

這不起作用,沒有創建節點。

graph_db.get_or_create_index(neo4j.Node, 'node_index') 
batch = neo4j.WriteBatch(neo4j_graph) 
b = batch.get_or_create_indexed_node(NEO4J_NODE_INDEX, 'name', 
    'b', 
    {'name': 'b'} 
) 
batch.set_labels(b, 'Person') 
batch.submit() 

回答

0

這是批處理端點和其他資源,通過REST接口工作,需要一些熟悉的REST API完全理解的方式的限制。

批處理端點將多個HTTP請求捆綁到單個事務中執行的單個調用中。從這樣的請求返回的值之一是location URI,並且在某些情況下可以將其傳遞給其他請求。例如,可能需要創建兩個節點,然後創建一個關聯它們的關係。這可以通過使用諸如{0}{1}之類的指針來指代先前創建爲新關係的端點的節點。有關此標記的更多詳細信息,請參閱here

使用傳統索引調用時會遇到困難。當通過傳統索引node is created時,返回的location URI是索引入口點的URI,而不是新創建的節點。這不能用作參考(例如在上面的set_labels調用中),因此預期的行爲不會發生。

不幸的是,這方面沒有簡單的解決方法。你可以移動到Cypher,但你沒有辦法在那裏寫入遺留索引。也許你可以看看模式索引,而不是?