Мои узлы имеют свойство массива category_ids
, которое содержит целые числа.Отфильтруйте узлы neo4j путем вычитания узлов, возвращаемых индексом
Я могу запросить узлы, чьи 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;
Но как я могу использовать индекс, чтобы получить узлы I сделать хотите? IE возвращает все узлы минус узлы, возвращаемые моим индексом? Вот мой старт:
START node=node(*), excluded=node:nodes_categories("category_ids:(1 2 3)")
???
RETURN node;
Edit: Neo4j версия 1.9.M02
Наивный способ, похоже, работает только в том случае, если индексный удар возвращает один узел, иначе он возвращает все узлы, в том числе те, которые попадают в индексный хит. Лучший способ действительно работает. Но я хочу включить узлы, отсутствующие в индексе, поэтому я действительно хотел бы получить наивный способ работать. –
Также наивный способ возвращает 0 узлов вместе, если индексный удар возвращает 0 узлов. Я могу смело предположить, что индексный удар вернет хотя бы 1 узел, но я указываю на это, чтобы выяснить, что происходит. –
Хм, хорошо. Наверное, я не думал об этом полностью. –