Elasticsearch嵌套对象过滤:仅保留符合特定状态或无状态的文档
Elasticsearch嵌套对象过滤:确保所有interviewRounds对象符合指定条件
需求明确:检索到的文档必须满足entity.interviewRounds数组中的每一个嵌套对象,要么不存在status字段,要么status的值为INTERVIEW_SCHEDULE_PENDING。
你之前的查询逻辑有误——用nested结合should的写法,只要数组里有一个对象符合条件就会返回整个文档,这和「所有对象都要符合要求」的需求完全相反。
正确的查询语句
{ "bool": { "must_not": { "nested": { "path": "entity.interviewRounds", "query": { "bool": { "must": [ { "exists": { "field": "entity.interviewRounds.status" } }, { "bool": { "must_not": { "term": { "entity.interviewRounds.status.keyword": "INTERVIEW_SCHEDULE_PENDING" } } } } ] } } } } } }
逻辑说明
- 外层用
bool.must_not,核心是排除所有包含不符合条件的嵌套对象的文档 - 嵌套查询部分专门定位:存在
status字段,且status值不等于INTERVIEW_SCHEDULE_PENDING的嵌套对象 - 经过这样的排除后,剩下的文档必然满足「所有嵌套对象要么无
status,要么status是指定值」的要求
你的示例文档完全符合条件,会被这个查询匹配到。
内容的提问来源于stack exchange,提问作者Kishnu
相关产品推荐
相关产品推荐

