三、直方图(条形图)
-
histogram
- 可应用于从文档中提取的数值或数值范围值。它会在值上动态构建固定大小(也称为间隔)的存储桶
- 常常应用于图表类的展示数据
- 请求示例:
-
POST /sales/_search?size=0 { "aggs": { "prices": { "histogram": { "field": "price", "interval": 50 } } } }
返回示例:
-
{ ... "aggregations": { "prices": { "buckets": [ { "key": 0.0, "doc_count": 1 }, { "key": 50.0, "doc_count": 1 }, { "key": 100.0, "doc_count": 0 }, { "key": 150.0, "doc_count": 2 }, { "key": 200.0, "doc_count": 3 } ] } } }
-
dateHistogram
- 与上一个聚合类似,但只能与日期或日期范围值一起使用。由于日期在 Elasticsearch 内部表示为长值,因此在日期上也可以使用正常值,但并不那么准确。这两个 API 的主要区别在于,此处可以使用日期/时间表达式指定间隔。基于时间的数据需要特殊支持,因为基于时间的间隔并不总是固定的长度。
- 间隔的类型可以自己设置,提供如下类型
- 分钟,
1m
- 所有分钟从 00 秒开始。一分钟是指定时区中第一分钟 00 秒和下一分钟 00 秒之间的间隔,补偿任何中间的闰秒,因此小时过后的分钟数和秒数在开始和结束时相同。
小时
, 1h
- 所有小时从 00 分 00 秒开始。一小时 (1h) 是指定时区中第一个小时的 00:00 分钟和下一个小时的 00:00 分钟之间的间隔,补偿任何中间的闰秒,因此小时后的分钟数和秒数在开始和结束时相同。
天
, 1d
- 所有日子都从最早的时间开始,通常是 00:00:00(午夜)。一天 (1d) 是指定时区中一天的开始和第二天的开始之间的间隔,用于补偿任何中间的时间更改。
周
, 1w
- 一周是开始day_of_week:小时:分钟:秒与指定时区中一周的同一天和下一周的时间之间的间隔。
- 月,
1M
- 一个月是指定时区中该月的开始日和一天中的时间与该月的同一天和下个月的同一时间之间的间隔,因此该月的某一天和一天中的时间在开始和结束时是相同的。
季
, 1q
- 一个季度是月份开始日和一天中的时间与三个月后的同一天和一天中的时间之间的间隔,因此月份中的某一天和一天中的时间在开始和结束时是相同的。
年, 1y
- 一年是指定时区中月份和一天中的开始日期与下一年的同一天和一天中的同一天之间的间隔,因此日期和时间在开始和结束时相同。
- 分钟,
- 请求示例:
-
POST /sales/_search?size=0 { "aggs": { "sales_over_time": { "date_histogram": { "field": "date", "calendar_interval": "1M", "format": "yyyy-MM-dd" } } } }
返回示例:
-
{ ... "aggregations": { "sales_over_time": { "buckets": [ { "key_as_string": "2015-01-01", "key": 1420070400000, "doc_count": 3 }, { "key_as_string": "2015-02-01", "key": 1422748800000, "doc_count": 2 }, { "key_as_string": "2015-03-01", "key": 1425168000000, "doc_count": 2 } ] } } }
我们也可以设置固定间隔,或除以上类型的其他时间间隔,比如秒、毫秒、几周、几月等,可以参考官方文档:开发文档