如何只选择嵌套文档(或数组)的特定列表根本没有特定值的那些文档?

时间:2019-06-14 06:35:05

标签: elasticsearch elasticsearch-6

我有一个Order对象,其中包含一个Product对象数组。我需要选择那些仅具有产品对象列表的Order对象,这些产品对象带有标志“ isExpired”:true,或者换句话说,没有任何产品对象带有“ isExpired”:false。

我尝试了以下查询:

{
    "query": {
        "nested": {
            "path": "products",
            "query": {
                "bool": {
                    "must_not": [
                        {
                            "term": {
                                "products.isExpired": false
                            }
                        }
                    ]
                }
            }
        }
    }
}

但是,这还会返回具有两个带有true和false标志的乘积的Order对象。

我认为,由于“产品”是一个嵌套文档,并且其索引或单独存储,因此我正在获取至少带有isExpired为false的产品的文档。但是我不确定如何解决这个问题。我绝对不能更改映射,因为嵌套映射可以完美地满足其他查询要求。

我正在使用Elasticsearch 6.3。

0 个答案:

没有答案