У меня есть объект Order, в котором есть массив объектов Product. Мне нужно выбрать те объекты Order, у которых есть только список объектов Product, имеющих флаг «isExpired»: true или другими словами, у которых нет объектов Product с «isExpired»: false.
Я попробовал следующий запрос:
{
"query": {
"nested": {
"path": "products",
"query": {
"bool": {
"must_not": [
{
"term": {
"products.isExpired": false
}
}
]
}
}
}
}
}
Однако это также возвращает объекты Order типа, которые имеют оба продукта с флагами true и false.
Я думаю, что поскольку "Продукты" - это вложенный документ, и он индексируется или хранится отдельно, я получаю документы, по крайней мере, с одним продуктом, для которого isExpired имеет значение false. Но я не уверен, как обойти эту проблему. Я определенно не могу изменить сопоставление, поскольку вложенное сопоставление отлично работает для других требований запроса.
Я использую Elasticsearch 6.3.