es的histogram直方图聚合和terms分组聚合

你提到的这两个 Elasticsearch aggs 聚合语句:


第一种:histogram 直方图聚合

json 复制代码
"aggs": {
  "DayDiagram": {
    "histogram": {
      "field": "${FiledName}",
      "interval": ${TimeInterval},
      "extended_bounds": {
        "min": ${StartTime},
        "max": ${EndTime}
      }
    }
  }
}

第二种:terms 分组聚合

json 复制代码
"aggs": {
  "Records": {
    "terms": {
      "field": "${GroupByField}",
      "size": ${PageSize}
    }
  }
}

它们的区别概览

特性/维度 histogram 聚合 terms 聚合
聚合类型 数值直方图(数值/时间区间) 分类聚合(类似 SQL GROUP BY
适用字段类型 long / integer / date 等数字类型 keyword.keyword 可聚合的字段类型
聚合规则 按固定步长分桶(如每5分钟、每100) 按字段值枚举分桶
桶的 key 是什么? 范围起点值(如 0、5、10、15) 具体字段值(如"蓝色","白色","黄色")
是否可控时间段? ✅ 可通过 extended_bounds 强制显示所有区间 ❌ 只能显示实际存在的数据
典型应用 时间趋势图、数值区间图 某字段的分布、频次分析
支持排序 ✅ 默认按桶 key 排序 ✅ 默认按 doc_count 排序,可自定义

示例解释对比

histogram 示例:每 5 分钟统计一次事件数(时间直方图)

json 复制代码
"aggs": {
  "DayDiagram": {
    "histogram": {
      "field": "EventTimeMillis",
      "interval": 300000,
      "extended_bounds": {
        "min": 1622505600000,
        "max": 1622592000000
      }
    }
  }
}

假设 EventTimeMillislong 类型,单位是毫秒,表示事件时间。

每 5 分钟(300000ms)统计一次数据,支持时间缺口补全。

非常适合画:流量趋势图、柱状图、折线图


terms 示例:按车牌颜色统计通过数量(字段聚合)

json 复制代码
"aggs": {
  "Records": {
    "terms": {
      "field": "PlateColor.keyword",
      "size": 10
    }
  }
}

返回文档中最常出现的 10 种车牌颜色。
terms 是最常用的聚合类型,等价于 SQL 的 GROUP BY

非常适合做:分类统计、占比分析、分组报表


图示理解(类比 SQL)

histogram:

sql 复制代码
SELECT floor(EventTimeMillis / 300000) * 300000 AS time_slot, COUNT(*) 
FROM table 
GROUP BY time_slot;

terms:

sql 复制代码
SELECT PlateColor, COUNT(*) 
FROM table 
GROUP BY PlateColor
LIMIT 10;

是否可以嵌套?

可以:

例如你可以在 histogram 桶内再嵌套 terms:

json 复制代码
"aggs": {
  "TimeSlot": {
    "histogram": {
      "field": "EventTimeMillis",
      "interval": 300000
    },
    "aggs": {
      "ByPlateColor": {
        "terms": {
          "field": "PlateColor.keyword"
        }
      }
    }
  }
}

效果:每5分钟 + 按车牌颜色统计,非常适合图表联动。


总结对比

项目 histogram terms
用途 时间/数值分桶 分类字段分桶
数据维度 连续区间(固定间隔) 离散值(不同字段值)
桶排序 默认按 key 升序 默认按 count 降序,可改按 key 排序
补全空值 ✅ 使用 extended_bounds 实现 ❌ 不支持
图表用途 趋势图、时间序列 饼图、条形图

相关推荐
ACP广源盛139246256734 分钟前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
x861 小时前
Agent 的搜索引擎:Agentic Resource Discovery 规范,以及它解决不了的信任问题
搜索引擎·agent
微三云-张梅1 小时前
东莞企业做GEO:AI信任体系的三个建设层级
大数据·人工智能·微三云geo·东莞系统开发·东莞geo
starzy19902 小时前
Spark 核心之 Spark-SortShuffle 原理深度剖析
大数据·spark
Elasticsearch2 小时前
什么是混合搜索?
elasticsearch
美狐美颜sdk4 小时前
直播APP开发技术架构解析:从音视频流到第三方美颜SDK接入的完整方案
大数据·人工智能·音视频·美颜sdk·美颜api
Capricorn19884 小时前
知芽研究问题看板无法推进?从孵化区到笔记的机制排查指南
大数据·论文阅读·人工智能·笔记·学习方法·论文笔记
凡科网小帆4 小时前
2026小程序商城平台哪家强,小程序商城平台选型怎么做
大数据·小程序·小程序商城平台
睿本云5 小时前
从“有数据”到“会用数据”,一次标签体系的升级能带来的改变
大数据·人工智能
牛奶咖啡135 小时前
大数据Hadoop运维应用实践——Hadoop平台常见问题与故障汇总、系统调优、网络规划与硬件存储选型
大数据·hadoop·hadoop集群操作系统调优·hadoop集群运维问题汇总·hadoop集群硬件规划·大数据平台网络规划·大数据平台硬件存储选型