优化此Neo4J Cypher查询

时间:2013-11-17 01:58:08

标签: neo4j cypher

我正在学习Neo4J,我的玩具项目是与Twitter一起玩。在这个小脚本中,我使用python tweepy和py2neo来获取一个twitter_user并插入他们所有的朋友。

def insert_friends(twitter_user):
    for friend in Cursor(api.friends, user_id=twitter_user.id_str).items():
        n=neo4j.CypherQuery(graph_db,"""
                MATCH (user),(friend)
                WHERE user.id_str={user_id_str} AND friend.id_str={friend_id_str}
                CREATE UNIQUE (user)-[:FOLLOWS]->(friend)
        """).execute_one(user_id_str=twitter_user.id_str, friend_id_str=friend.id_str)

这很好用,但我怀疑它可以优化。也就是说,在WHERE子句中,我每次都在查找相同的user.id.我如何每次都避免额外的查找?例如,无论如何,我可以先验一下Neo4J中的哪个节点并指定Neo4J内部节点ID?

1 个答案:

答案 0 :(得分:4)

您需要使用标签和索引!

即:

CREATE INDEX on :User(id_str);

MATCH (user:User),(friend:User) // add labels so it knows to use the index
WHERE user.id_str={user_id_str} AND friend.id_str={friend_id_str}
CREATE UNIQUE (user)-[:FOLLOWS]->(friend);