Как выбрать только те документы, в которых определенный список вложенных документов (или массив) вообще не имеет определенного значения? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть объект 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.

...