2017-03-20 4 views
0

私はPythonでコサイン類似行列を持っており、その値に基づいて関係を作りたいと思っています。 私のクエリはpython行列からneo4jを高速に関係づけるには?

MATCH (n:Product {id : {id}}),(m:Product {id:{id2}}) MERGE (n)-[r:SIM]-(m) SET r.weight={w}

であり、私はこの

for i in range(x): 
    for j in range(x): 
     make_relation(i,j,w) 

を行うことで関係を挿入するよ、それはあまりにも長い時間がかかったので、ネストされたループよりも関係を挿入するためのより高速な方法はありますか?

答えて

1

ループを実行して実行するのではなく、ループを使用してリストを作成するので、リストをアンワインドさせるトリックを使用して、すべてのリスト項目に対して1回の操作で実行できます。

あなたのcypherクエリのパラメータの1つを、double-forループによって事前入力されたリストでidid2の辞書リスト( 'rowList'をパラメータマップのキーとしましょう)としましょうおよびw

あなたのCypherはあなたの説明と同様のクエリですが、渡されたリストを使用するように変更できます。リストを行に巻き戻し、すべての関係を一度に作成します。これはペアごとに1つではなく1つの操作になります。

UNWIND {rowList} as row 
MATCH (n:Product {id : {row.id}}),(m:Product {id:{row.id2}}) 
MERGE (n)-[r:SIM]-(m) 
SET r.weight={row.w} 
+0

ご回答ありがとうございます。それは私に代替方法を与える。リストを作成した後、私はcsvで書きます。次に、定期的なコミットを使用して、私はcsvをロードし、上記のクエリを使用して1つのサイファーで関係を作成します –

関連する問題