嵌套查询中的Elasticsearch must_not

时间:2018-10-09 18:00:18

标签: elasticsearch

我的弹性搜索索引具有嵌套字段。并且我想使用must,它包含一个带有嵌套查询的must_not查询。我已经通过以下方式分别尝试过must_not查询:

{
    "bool": {
        "must_not": [{
            "nested": {
                "path": "fields",
                "query": {
                    "terms": {
                        "fields.value.raw": [
                            "200"
                        ]
                    }
                }
            }
        }]
    }
}

上面的查询给我一个有效的结果,但是当我尝试使用must查询时,它将不会给我任何结果。我正在使用以下查询:

{
        "bool": {
            "must": [{
                "nested": {
                    "path": "fields",
                    "query": {
                        "bool": {
                            "must": [{
                                "match": {
                                    "fields.uid": "number"
                                }
                            }, {
                                "bool": {
                                    "must_not": [{
                                        "nested": {
                                            "path": "fields",
                                            "query": {
                                                "terms": {
                                                    "fields.value.raw": [
                                                        "200"
                                                    ]
                                                }
                                            }
                                        }
                                    }]
                                }
                            }]
                        }
                    }
                }
            }]
        }
    }

以上查询没有给我有效的结果。上面的查询有什么问题? 我该如何在嵌套查询中使用must_not?

1 个答案:

答案 0 :(得分:0)

您应该在同一布尔查询中使用must和must_not。

{
    "bool": {
        "must_not": [{
            "nested": {
                "path": "fields",
                "query": {
                    "terms": {
                        "fields.value.raw": [
                            "200"
                        ]
                    }
                }
            }
        }],
        "must": [{
            "match": {
                "fields.uid": "number"
            }
        }]
    }
}