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

Elastic:如何在子聚合中引用histogram直方图聚合的桶key?

实现方案

ES的range聚合不支持在from/to参数中动态引用父桶的key,你可以通过filters聚合配合Painless脚本来实现需求,该方案适用于Elasticsearch 7.12及以上版本,以下是可直接运行的查询:

{
  "aggs": {
    "tasks_by_start": {
      "histogram": {
        "field": "start",
        "interval": 10
      },
      "aggs": {
        "completed": {
          "filters": {
            "filters": [
              {
                "script": {
                  "source": "doc['end'].value < params._key + 10",
                  "lang": "painless"
                }
              },
              {
                "script": {
                  "source": "doc['end'].value >= params._key + 10",
                  "lang": "painless"
                }
              }
            ]
          }
        }
      }
    }
  }
}

说明

  • 脚本中的params._key就是当前父histogram桶的key值,可直接用于动态计算阈值
  • 如果你的start和end是标准毫秒级时间戳,只需要把10替换为对应时间间隔的毫秒值即可,比如间隔10秒就写10*1000
  • 针对你给出的示例数据,返回结果完全符合预期:
    • 桶key为0(对应start在0~10区间的文档):第一个filter命中end=5的文档,第二个filter无匹配
    • 桶key为10(对应start在10~20区间的文档):第二个filter命中end=23的文档,第一个filter无匹配

内容的提问来源于stack exchange,提问作者Brady O'Connell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:18:02