Neo4J - 简单的“追随者”图

时间:2013-04-07 19:41:16

标签: neo4j py2neo

我正在尝试使用Neo4J和Python创建一个简单的Twitter式“追随者/朋友”图。该图表看起来像

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“)”似乎每次运行脚本时都会创建重复的关系,对于图形数据库新手来说,由于关系完全相同,因此会稍微让我感到困惑。< / p>

创建重复关系的可能性非常低,但如果发生这种关系,是否会导致图遍历问题?我应该使用某种独特的功能索引我的FOLLOWS索引吗?

1 个答案:

答案 0 :(得分:2)

我会使用cypher CREATE UNIQUE仅创建一个FOLLOWs关系,如果没有,请参阅http://docs.neo4j.org/chunked/milestone/query-create-unique.html

那会有用吗?