Elasticsearch 8.9中filter上下文missing子句的替代方案是什么?
Elasticsearch 8.9替换废弃
missing查询的解决方案 在Elasticsearch 2.3中可用的missing查询,在8.9版本已被彻底移除,因此执行原语句会触发"unknown field [missing]"错误。
要实现相同的逻辑(匹配不存在lst_act_date字段的文档),需使用bool.must_not结合exists查询的组合写法,这是官方推荐的替代方案,完全兼容8.9版本:
{ "size": 0, "query": { "bool": { "filter": [ { "bool": { "must_not": { "exists": { "field": "lst_act_date" } } } } ] } } }
如果不需要额外嵌套在filter中(原逻辑里filter仅用于过滤且不影响评分,must_not本身也不影响评分),也可以简化为:
{ "size": 0, "query": { "bool": { "must_not": { "exists": { "field": "lst_act_date" } } } } }
missing查询早在Elasticsearch 5.x版本就已被标记为废弃,后续版本逐步移除,改用exists查询的反向逻辑是ES版本迭代后的标准写法。
内容的提问来源于stack exchange,提问作者Ajay Takur
相关产品推荐
相关产品推荐

