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

Elasticsearch查询中数组值与数组长度不匹配问题

问题分析:Elasticsearch数组长度计算不匹配

执行的查询语句

GET my_index/_search
{
  "_source": ["file_types", "link_to_file"],
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "_id": "45t8724b811b590d54cc1925166a9cb5"
          }
        }
      ]
    }
  },
  "script_fields": {
    "file_types_len": {
      "script": "doc['file_types'].length"
    },
    "link_to_file_len": {
      "script": "doc['link_to_file'].length"
    }
  }
}

查询结果

{
  "_index": "my_index-150522",
  "_type": "_doc",
  "_id": "45t8724b811b590d54cc1925166a9cb5",
  "_score": 0.0,
  "_source": {
    "link_to_file": [
      "https://bucket.s3.amazonaws.com/abc123",
      "https://bucket.s3.amazonaws.com/wer134"
    ],
    "file_types": ["jpeg", "jpeg"]
  },
  "fields": {
    "file_types_len": [1],
    "link_to_file_len": [2]
  }
}

原因解释

doc['field'].length获取的是倒排索引中该字段的去重词项数量,而非原始数组的元素个数:

  • file_types数组的两个元素都是jpeg,倒排索引会对重复值去重,仅保留1个词项,因此计算出的长度为1。
  • link_to_file数组的两个URL是不同值,倒排索引保留了2个独立词项,所以计算长度为2。

解决方法

要获取原始数组的真实长度,需直接读取原始文档的字段值进行计算,修改script_fields中的脚本为:

"script_fields": {
  "file_types_len": {
    "script": "params._source.file_types.length"
  },
  "link_to_file_len": {
    "script": "params._source.link_to_file.length"
  }
}

内容的提问来源于stack exchange,提问作者bodha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:52:09