You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:22:43