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



我正在尝试使用boolnot构造一个弹性搜索查询,因为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'
}
}]
}
}}

相关内容

  • 没有找到相关文章

最新更新