通过减去索引返回的节点来过滤neo4j节点

时间:2013-06-18 20:18:14

标签: neo4j cypher graph-databases

我的节点有一个包含整数的数组属性category_ids

我可以在{1,2,3]中查询category_ids与{1}}不匹配的节点:

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

1 个答案:

答案 0 :(得分: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;