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

如何在Elasticsearch中基于聚合数据按计数器总和排序搜索词

Elasticsearch 分组统计排序解决方案

数据集批量写入语句

PUT my-data-stream/_bulk
{"create":{}}
{"timestamp":"2022-05-06T18:25:42","search_term":"hello", "counter": 10}
{"create":{}}
{"timestamp":"2022-05-06T18:25:42","search_term":"bye", "counter": 5}
{"create":{}}
{"timestamp":"2022-05-06T17:25:42","search_term":"hello", "counter": 9}
{"create":{}}
{"timestamp":"2022-05-06T17:25:42","search_term":"bye", "counter": 7}
{"create":{}}
{"timestamp":"2022-05-06T16:25:42","search_term":"hello", "counter": 5}
{"create":{}}
{"timestamp":"2022-05-06T16:25:42","search_term":"bye", "counter": 2}

需求说明

筛选出时间戳大于指定值的记录,按search_term分组计算counter字段的总和,最终按总和降序输出结果。示例中指定时间戳为2022-05-06T16:35:42,对应前4条记录,预期输出:

hello, 19 (10 + 9)
bye, 12 (5 + 7)

实现查询语句

使用Elasticsearch的聚合查询即可实现,DSL如下:

GET my-data-stream/_search
{
  "size": 0, // 不返回原始文档,仅返回聚合结果
  "query": {
    "range": {
      "timestamp": {
        "gt": "2022-05-06T16:35:42" // 过滤时间戳大于指定值的记录
      }
    }
  },
  "aggs": {
    "group_by_search_term": {
      "terms": {
        "field": "search_term.keyword", // 需用keyword类型字段分组,避免分词干扰
        "order": {
          "total_counter": "desc" // 按counter总和降序排序
        }
      },
      "aggs": {
        "total_counter": {
          "sum": {
            "field": "counter" // 计算每组counter的总和
          }
        }
      }
    }
  }
}

查询结果解析

执行上述查询后,聚合结果会返回每个search_term对应的counter总和,按降序排列:

  • hello组总和:10 + 9 = 19
  • bye组总和:5 + 7 = 12

如果需要格式化为示例中的文本样式,可在应用层对聚合结果进行遍历拼接即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:50:51