ElasticSearch:如何修正对象数组过滤查询,保留含部门记录的文档?
修正Elasticsearch查询:筛选包含部门类型Resolution的文档
需求明确:从索引中筛选出resolutions数组至少包含一个部门类型Resolution的文档。部门类型Resolution的判定规则是:仅包含divisionId字段,不存在employeeId字段,且目标部门divisionId为660。
原查询的问题
原查询错误地设置了minimum_should_match: 2,要求两个should条件同时满足:既要resolutions数组中存在divisionId=660的项,又要整个数组的所有Resolution都不存在employeeId。这就导致只要数组里有一个员工类型(同时包含divisionId和employeeId)的Resolution,文档就无法被匹配到。
正确查询写法
由于resolutions是嵌套数组,我们需要针对单个嵌套对象做条件判断——只要数组中存在一个同时满足divisionId=660且无employeeId的对象,就返回对应文档。正确查询如下:
{ "query": { "nested": { "path": "resolutions", "query": { "bool": { "must": [ {"terms": {"resolutions.divisionId": [660]}}, {"bool": {"must_not": [{"exists": {"field": "resolutions.employeeId"}}]}} ] } } } } }
逻辑说明
这个查询会遍历每个resolutions嵌套对象,只要有一个对象同时符合divisionId=660且不存在employeeId的条件,就会命中并返回对应的文档,完全不受数组中其他Resolution类型的影响。
内容的提问来源于stack exchange,提问作者vr552
相关产品推荐
相关产品推荐

