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 回答