Допустим, у меня проиндексированы следующие документы:
[
{
"Id": 1,
"Numbers": [1, 2, 3]
},
{
"Id": 2,
"Numbers": [4, 5]
}
]
У меня есть параметр [1,2,4,5], который определяет, какие числа мне не разрешено видеть - я хочу найти документы, в которых массив «Numbers» содержит хотя бы один элемент НЕ во входном массиве (так что в данном случае первый документ должен быть возвращен).
Реальный сценарий предназначен для поиска групп, которые (или чьи дочерние группы) не содержат продуктов, принадлежащих к определенному типу продуктов. У меня есть рекурсивно проиндексированные идентификаторы типов продуктов (представленные в примере числами), и я хочу найти группы, которые содержат продукты, не принадлежащие моему входному параметру (мой входной параметр представляет собой массив идентификаторов типов продуктов, которые мне не разрешено видеть)
Какой запрос / фильтр мне следует использовать и как его построить? Я учел следующее:
return desc.Bool(b => b
.MustNot(mn => mn.Bool(mnb => mnb.Must(mnbm => mnbm.Terms(t => t.ItemGroups, permissions.RestrictedItemGroups) && mnbm.Term(t => t.ItemGroupCount, permissions.RestrictedItemGroups.Count())))));
но проблема в том, что у меня есть 6 ограниченных групп элементов, где, поскольку данная группа содержит 3 ограниченные группы, я не найду никаких совпадений, потому что счетчик не совпадет. Теперь в этом есть некоторый смысл. В качестве обходного пути я реализовал Results.Except (Restricted) в C #, чтобы отфильтровать ограниченные группы после поиска, но хотел бы реализовать его в elasticsearch.