我正在尝试使用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索引吗?
答案 0 :(得分:2)
我会使用cypher CREATE UNIQUE
仅创建一个FOLLOWs关系,如果没有,请参阅http://docs.neo4j.org/chunked/milestone/query-create-unique.html
那会有用吗?