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

Elasticsearch无需重建索引实现text字段全值去重聚合

问题描述
  • 待查询文档数据总规模约350TB,重建索引方案不可行,可接受合理范围内的查询性能损耗。
  • 现有索引中s3_filename字段映射为{"type": "text"},未配置任何子字段。为该字段设置fielddata: true后执行聚合,结果不符合预期:返回的是字段值经分词拆分后独立词元的去重结果,而非完整字段值的去重结果。
  • 例如s3_filename字段取值为ud20220711/long-file-name-20220711.json.gz时,预期对完整文件名做聚合统计,实际得到的是拆分后的词元分桶,如long、file、name、20220711、json、gz,不存在对应完整文件名的分桶,尝试普通terms聚合、composite聚合均无法解决该问题。
解决方案

无需重建索引,在查询内定义runtime fields(运行时字段),将s3_filename临时指定为keyword类型即可得到符合预期的聚合结果,查询语句如下:

{
  "runtime_mappings": {
    "s3_filename": {
      "type": "keyword"
    }
  },
  "aggs": {
    "filenames": {
      "terms": {
        "field": "s3_filename",
        "size": 10000
      }
    }
  }
}
性能评估
  • 上述查询耗时为同数据集普通聚合查询的18倍,在350TB数据集上总耗时约74分钟。
  • 对比重建350TB索引所需的约15天耗时,该方案带来的性能损耗完全在可接受范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:48:22