2013-12-09 9 views
6

私はメンバーのグラフと見たアイテムがあります。配列の値をcypher/neo4jと比較する

このデータは、同様のメンバーが見たアイテムに基づいてアイテムを推薦するために使用されます。私はアイテムの色がどれほど似ているかに基づいてアイテムを並べ替えたいと思います。色は配列の項目に格納されます(["red"、 "blue"、 "green"])。 cypherに配列を比較して共通の要素数を確認する方法はありますか?

答えて

8

考えると二つのノードのようになり、nとm、:あなたはこのような何かを行うことができます

CREATE ({id: 1, color: ["red", "blue", "green", "yellow"]}) 
CREATE ({id: 2, color: ["red", "blue", "green", "white"]}) 

:n.color配列を通じて

MATCH n, m 
WHERE n.id = 1 AND m.id = 2 
RETURN length(FILTER(x in n.color WHERE x in m.color)) 

FILTER機能の反復処理し、結合現在の値はxです(私が任意に選択したもので、違うかもしれません)。述語(x in m.color)は、それぞれxの値に対してチェックされ、真と評価された場合、その要素はFILTERが返す新しい配列にプッシュされます。 2つの配列(この場合は赤、青、緑)の交差を表示するか、またはlength関数でラップして、2つのノード間で共有される色の数を表示することができます(この場合は3) 。

チェックアウトここで完全FILTERドキュメント:http://docs.neo4j.org/chunked/milestone/query-functions-collection.html#functions-filter

+1

説明と良い回答の+1が、(答えはバージョン2.0を想定しているので、同様かもしれないが)特性との一致を使用し 'MATCH(N {ID:1} )等を含む。 – jjaderberg

+0

ああ、そうです。 2.0(M06)のマイルストーンリリースを使用していますが、その構文をサポートしていませんが、良い呼び出しです。 –

+0

最後に 'length'と書かれていますが、クエリの' count'は実際に意味をなさない - 結果の数を返すだけです。 –

関連する問題