2013-04-07 50 views
1

我試圖用Neo4J和Python創建一個簡單的Twitter式樣「追隨者/朋友」圖。圖表看起來像Neo4J - 簡單的「追隨者」圖

user_1 FOLLOWS user_2 
user_1 FOLLOWS user_3 
user_2 FOLLOWS user_1 

的讀數一天,我想最好還是使用REST接口直線跳水後,因爲我使用Python,py2neo。這裏是我的代碼:

from py2neo import neo4j 

def main(): 
    g = neo4j.GraphDatabaseService() 

    # Create an index for our user nodes 
    index = g.get_or_create_index(neo4j.Node, "user") 

    # Create a single node, User 1 
    node = index.get_or_create("user", "User_1", {"id": "User_1"}) 

    # Populate the graph with some more users just for testing 
    nodes = [] 
    for user in ["User_2", "User_3", "User_4", "User_5"]: 
     nodes.append(index.get_or_create("user", user, {"id":user})) 

    # Create a relationship between User_1 and User_2 
    g.get_or_create_relationships((node, "FOLLOWS", nodes[0])) 

if __name__ == '__main__': 
    main() 

正如你所看到的,我使用get_or_create_relationships防止重複關係和增加數千我假定這將招致某種開銷的節點時。

直接使用node.create_relationship_to(nodes [0],「FOLLOWERS」)「似乎在每次腳本運行時都會創建重複關係,對於圖形db新手來說,由於關係完全相同,所以會稍微混淆我。

創建重複關係的可能性非常低,但是如果發生這種情況,會導致圖遍歷問題嗎?我應該用某種獨特的功能將我的FOLLOWS索引編入索引嗎?

回答

2

我會用暗號CREATE UNIQUE僅創建如下releationship如果沒有,則現有的,看到http://docs.neo4j.org/chunked/milestone/query-create-unique.html

將這項工作?

+0

所以這將涉及使用Cypher查詢而不是py2neo「get_or_create_relationship」?如果Cypher是這樣做的唯一方式,看起來像REST界面缺乏一個非常基本的功能:( – Hanpan 2013-04-08 12:55:30

+0

其餘接口還提供了獨特的創建功能,請參閱http://docs.neo4j.org/chunked/milestone/rest- API器唯一indexes.html – RaduK 2013-04-08 13:31:54