0

我正在尝试构建一个用于not使用的弹性搜索查询bool,因为not已弃用。例如,匹配所有不属于foo@bar.com.

我使用 elasticsearch-dsl 尝试了这些(按照这篇文章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'存在其他文档,但这不会返回任何结果。

我也试过

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

这会返回一些文件的组合,有些文件有'author': 'foo@bar.com',有些则没有。

4

1 回答 1

1

事实证明这是 5.0 中映射更改的问题(https://www.elastic.co/guide/en/elasticsearch/reference/current/break_50_mapping_changes.html

以下查询按预期工作:

{'query': {
    'bool': {
        'must_not': [{
            'term': {
                'author.keyword': 'foo@bar.com'
            }
        }]
    }
}}
于 2017-08-05T17:55:01.977 回答