使用 bool 而不是 not 的弹性搜索查询

Elastic search query using bool instead of not

我正在尝试使用 boolnot 构造一个 elasticsearch 查询,因为 not 已被弃用。例如。匹配所有不属于 foo@bar.com.

的文档

我使用 elasticsearch-dsl 尝试了这些(在这个 post https://www.elastic.co/blog/lost-in-translation-boolean-operations-and-filters-in-the-bool-query 之后):

{'query': {
    'bool': {
        'must_not': [{
            'match': {
                'author': 'foo@bar.com'
            }
        }]
    }
}}

尽管 'author': 'foo@bar.com' 以外的文档存在,但此 returns 没有结果。

我也试过了

{'query': {
    'bool': {
        'must_not': [{
            'term': {
                'author': 'foo@bar.com'
            }
        }]
    }
}}

这 returns 混合文档,其中一些有 'author': 'foo@bar.com' 一些没有。

这原来是 5.0 中映射更改的问题 (https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_50_mapping_changes.html)

以下查询按预期工作:

{'query': {
    'bool': {
        'must_not': [{
            'term': {
                'author.keyword': 'foo@bar.com'
            }
        }]
    }
}}