0

py2neo (v 1.9.2) を使用してデータを neo4j データベースに書き込みます。

batch = neo4j.WriteBatch(graph_db)
current_relationship_index = graph_db.get_or_create_index(neo4j.Relationship, "Current_Relationship")
touched_relationship_index = graph_db.get_or_create_index(neo4j.Relationship, "Touched_Relationship")
get_rel = current_relationship_index.get(some_key1, some_value1)
if len(get_rel) == 1:
    batch.add_indexed_relationship(touched_relationship_index, some_key2, some_value2, get_rel[0])
elif len(get_rel) == 0:
    created_rel = current_relationship_index.create(some_key3, some_value3, (my_start_node, "KNOWS", my_end_node))
    batch.add_indexed_relationship(touched_relationship_index, some_key4, "touched", created_rel)
batch.submit()

current_relationship_index.get(..) と current_relationship_index.create(...) をバッチ コマンドで置き換える方法はありますか? あることは知っていますが、問題は、これらのコマンドの戻り値に応じて行動する必要があることです。そして、パフォーマンスのためにすべてのステートメントをバッチに入れたいと思います。

リレーションシップにインデックスを付けるのはかなり珍しいことだと読みましたが、そうする理由は次のとおりです: 毎日いくつかの (テキスト) ファイルを解析する必要があり、リレーションシップのいずれかが前日に変更されたかどうかを確認する必要があります。リレーションがテキスト ファイルに存在しなくなったので、neo4j で「置換」プロパティでマークしたいと考えています。したがって、すべての「影響を受けた」関係を適切なインデックスに追加するので、これらが変更されていないことがわかります。touched_relationship_index に含まれていないすべての関係は、明らかにもう存在しないため、マークを付けることができます。

py2neo が提供していると確信していますが、これより簡単な方法は考えられません。

編集:ナイジェルのコメントを考慮して、私はこれを試しました:

my_rel = batch.get_or_create_indexed_relationship(current_relationship_index, some_key, some_value, my_start_node, my_type, my_end_node)
batch.add_indexed_relationship(touched_relationship_index, some_key2, some_value2, my_rel)
batch.submit()

バッチで「my_rel」を参照できないため、これは明らかに機能しません。どうすればこれを解決できますか? 前のバッチステートメントの結果を「0」で参照しますか? ただし、すべてがループで実行されることになっているため、数値は固定されていないことを考慮してください。おそらく、現在のバッチステートメントを参照し、ステートメントがバッチに追加されるたびに常に増加する変数「batch_counter」を使用しますか??

4

1 に答える 1