私はNeo4Jを学んでいて、私のおもちゃのプロジェクトはTwitterで遊ぶことです。この小さなスクリプトでは、python tweepyとpy2neoを使用して1つの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を指定するだけでよいのでしょうか。
ラベルとインデックスを使用する必要があります!
すなわち:
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);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加