OpenSearch中如何搜索存在空expenseTypes数组字段的文档
筛选
expenseTypes字段存在且为空数组的Elasticsearch文档 需要从文档集合中筛选出**expenseTypes字段存在且为空数组**的文档,目标文档示例如下:
{ "id": "123466", "expenseTypes": [] }
原查询的问题
你使用的查询通过term匹配expenseTypes: "",这无法命中目标文档——空数组在Elasticsearch中不会被索引为空白字符串,因此该查询逻辑不成立。
正确查询方案
方案1:脚本判断数组长度(最可靠)
先通过exists确保字段存在,再用脚本验证数组长度为0:
{ "bool": { "must": [ { "exists": { "field": "expenseTypes" } }, { "script": { "source": "doc['expenseTypes'].length == 0" } } ] } }
方案2:排除非空值文档(适用于keyword类型数组)
如果expenseTypes是keyword类型的数组,可结合exists和must_not排除所有包含有效值的文档:
{ "bool": { "must": [ { "exists": { "field": "expenseTypes" } } ], "must_not": [ { "wildcard": { "expenseTypes": "*" } } ] } }
内容的提问来源于stack exchange,提问作者Anandharaj Anandharaj
相关产品推荐
相关产品推荐

