Elasticsearch Nested查询失效:如何过滤evaluation_records为空数组的文档
正确的Elasticsearch过滤非空Nested数组方案
问题根源
当evaluation_records(nested类型)为空数组时,Elasticsearch不会为该字段生成任何嵌套文档,常规Nested查询无法定位到这类空数组文档,导致过滤失效。
方案一:简洁的Exists查询
直接判断字段是否存在索引内容,空数组文档会被自动排除:
{ "query": { "exists": { "field": "evaluation_records" } } }
方案二:结合Bool与Nested查询(支持复杂嵌套过滤)
如果需要同时对evaluation_records内部字段做过滤,可通过嵌套查询匹配至少一条嵌套文档:
{ "query": { "bool": { "must": [ { "nested": { "path": "evaluation_records", "query": { "match_all": {} } } } // 可追加其他针对evaluation_records字段的过滤条件 ] } } }
注意事项
若你的evaluation_records字段mapping中设置了include_in_parent: true或include_in_root: true,Exists查询依然有效,因为空数组不会在父/根文档中生成对应条目。
内容的提问来源于stack exchange,提问作者XJ Zhu
相关产品推荐
相关产品推荐

