我正在尝试使用bool
为not
构造一个弹性搜索查询,因为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'
,有些文档没有。
事实证明,这是 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'
}
}]
}
}}