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

Elasticsearch能否在单次请求中查询按name分组的多个avg平均值结果

结论

该需求完全可以在Elasticsearch中实现,仅需一次查询即可返回所有name对应的DO字段平均值,无需循环发起多次请求。

实现方案

你需要使用terms聚合先按name字段分组,再在每个分组内嵌套avg聚合计算DO字段的平均值即可。

注意:如果你的name字段是text类型,需要使用它的keyword子字段(通常为name.keyword)做聚合,否则terms聚合无法正常执行。

优化后的查询语句

POST test_entry/_search
{     
  "query": {  
    "bool": { 
      "filter": [ 
        { 
          "range": { 
            "Timestamp": {
              "lte":"now/d"
            }     
          }
        }
      ]
    }
  },  
  "size": 0,
  "aggs": {
    "group_by_name": {
      "terms": {
        "field": "name.keyword",
        "size": 1000 // 调整为你的name总数量,默认仅返回前10条结果
      },
      "aggs": {
        "DoAvg": {
          "avg": {
            "field": "DO"
          }
        }
      }
    }
  }
}

返回结果示例

返回结果结构和你期望的第一种格式匹配,示例如下:

"aggregations" : {
  "group_by_name" : {
    "buckets" : [
      {
        "key" : "name1",
        "doc_count" : 100,
        "DoAvg" : {
          "value" : 7.037004702415825
        }
      },
      {
        "key" : "name2",
        "doc_count" : 89,
        "DoAvg" : {
          "value" : 8.33212312312312
        }
      }
    ]
  }
}

注意事项

  • terms聚合默认仅返回匹配数最高的前10个分组,如果你的name总数量超过10,需要手动调整terms下的size参数到大于等于总name数,才能拿到全部结果。
  • 如果DO字段是text类型,需要先为它开启字段类型为数值的子字段,才能做平均值聚合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:03