1

cypher と neo4j 2.0 を使用。

ノード ID の 2 つのセット (同じ長さ) と重みのセットが与えられた場合、対応するノード間の関係を作成し、重みをプロパティとして設定したいと思います。たとえば、次の 3 つのリストがあるとします。

node list 1: (101, 201, 301)  
node list 2: (102, 202, 302)
weights:     (0.1, 0.6, 0.25)

次の表現を作成したいと思います

 101 - knows {w : .1}  - 102
 201 - knows {w : .6}  - 202
 301 - knows {w : .25} - 302

ただし、たとえば、 101 - knows - 302

これを行うには、パラメーターを繰り返し処理してから、個々のクエリを作成します。これをバッチ実行して、lsits をパラメーターとして渡し、 cypherノードとプロパティを順番に一致させる方法はありますか?


次の方法でパラメーターを使用するとうまくいくのではないかと一瞬考えましたが、代わりに (予想どおり) 関係のすべての順列を作成し、重みのリスト全体をプロパティとして関係に割り当てます。

{
    "query": 
       "START a1=node({starts}), a2=node({ends}) 
        CREATE UNIQUE a1-[r:knows {w : {weights}}]-a2 
        RETURN type(r), r.w, a1.name, a2.name",

    "params": {
        "starts"  : [101, 201, 301],
        "ends"    : [102, 202, 302],
        "weights" : [0.1, 0.6, 0.25]
    }
}
4

1 に答える 1

1

あなたのリストは実際にはどれくらいの大きさですか? おそらく一度に 1 つのトリプルを送信します。

それ以外の場合は、コレクションと foreach を使用して、必要なことを実行できるはずです。

START a1=node({starts}), a2=node({ends}) 
FOREACH(w in filter(w in weights : head(w)=id(a1) AND head(tail(w))=id(a2)) :
  CREATE UNIQUE a1-[r:knows {w : last(w)}]-a2 
)

"params": {
        "starts"  : [101, 201, 301],
        "ends"    : [102, 202, 302],
        "weights" : [[101,102,0.1], [201,202,0.6], [301,302,0.25]]
}
于 2013-08-08T22:34:11.883 に答える