1

我正在尝试使用 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")" 似乎都会创建重复的关系,这对于图形数据库新手来说有点让我困惑,因为关系完全相同。

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

4

1 回答 1

2

CREATE UNIQUE如果不存在,我将使用cypher 仅创建 FOLLOWs 关系,请参阅http://docs.neo4j.org/chunked/milestone/query-create-unique.html

那行得通吗?

于 2013-04-08T12:41:00.287 回答