2

私のノードには、category_ids整数を含む配列プロパティがあります。

category_idsリスト [1,2,3] のいずれにも一致しないノードを照会できます。

START node(*)
WHERE NOT(ANY(x in node.category_ids WHERE x IN [1,2,3]))
RETURN node;

インデックス (私はこれを呼んでnodes_categoriesおり、これは標準の正確な lucene インデックスです) を使用して、除外したいノードから開始できます。

START excluded=node:nodes_categories("category_ids:(1 2 3)")
RETURN excluded;

しかし、インデックスを使用して必要なノードを取得するにはどうすればよいでしょうか? IE は、インデックス ヒットによって返されたノードを除いたすべてのノードを返しますか? これが私のスタートです:

START node=node(*), excluded=node:nodes_categories("category_ids:(1 2 3)")
???
RETURN node;

編集: neo4j のバージョンは 1.9.M02 です

4

1 に答える 1

3

素朴な方法(更新):

START node=node(*), excluded=node:nodes_categories("category_ids:(1 2 3)")
WITH collect(excluded) as excluded, node
WHERE not node in(excluded)
RETURN distinct node;

より良い方法は、必要なノードだけのインデックスをクエリする方法を理解することです。ただし、lucene 構文でそれを行う方法があるかどうかはわかりません。たぶん次のようなもの:

START node=node:nodes_categories('category_ids:(* NOT 1 NOT 2 NOT 3)')
return node;
于 2013-06-18T21:11:24.873 に答える