interval(时间间隔)的可用表达式:
-
year(1y)年
-
quarter(1q)季度
-
month(1M)月份
-
week(1w)星期
-
day(1d)天
-
hour(1h)小时
-
minute(1m)分钟
-
second(1s)秒
"query": {
"bool": {
"must": [{
"range": {
"@timestamp": {
"gte": 1533556800000,
"lte": 1533806520000
"size": 0,
"aggs": {
"group_by_grabTime": {
"date_histogram": {
"field": "@timestamp",
"interval": "5m",
"time_zone":"+08:00",
"format": "yyyy-MM-dd HH",
"min_doc_count": 0,
"extended_bounds": {
"min": 1533556800000,
"max": 1533806520000
"aggs": {
"group_by_status": {
"terms": {
"field": "LowStatusOfPrice"
"took": 960,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
"_clusters": {
"total": 3,
"successful": 3,
"skipped": 0
"hits": {
"total": 13494821,
"max_score": 0,
"hits": []
"aggregations": {
"group_by_grabTime": {
"buckets": [
"key_as_string": "2018-08-06 12",
"key": 1533556800000,
"doc_count": 25851,
"group_by_status": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [ { "key": "2", "doc_count": 10804 }, { "key": "1", "doc_count": 7240 }, { "key": "4", "doc_count": 6716 }, { "key": "3", "doc_count": 1091 } ] }
"key_as_string": "2018-08-06 13",
"key": 1533562200000,
"doc_count": 25282,
"group_by_status": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [ { "key": "2", "doc_count": 10457 }, { "key": "1", "doc_count": 7185 }, { "key": "4", "doc_count": 6696 }, { "key": "3", "doc_count": 944 } ] }
.....
"buckets": [
"key_as_string": "2018-08-06 12",
"key": 1533556800000,
1.关于统计的时间段
2018-08-06 12 统计的是12~13点之间的数据
以此类推
2018-08-06 00 统计的是00~01之间的数据
2018-08-06 23 统计的是23~次日00之间的数据
2.关于key 和 key_as_string
key_as_string 不一定完全可信, 即key按照用户当前时间格式化之后不一定等于key_as_string
这是由建立es索引时采用的时区决定的, 用之前最好验证一下, 比如说博主现在正在做的一个项目中, 由于es采用的是ISO8859-1的时间格式, 导致所有时区提前了8个小时, 所以在查询和统计时, 一定要记得补偿这8个小时的数据
可以通过设置时区来解决这个问题
从广义上讲,我们可以将
聚合
分为两种类型:父
聚合
(parent aggregation)和兄弟
聚合
(sibling aggregation)。你可能会发现它们有点令人困惑,所以让我们看看它们是什么以及如何使用它们。
按
时间
统计
如果搜索是在
Elasticsearch
中使用频率最高的,那么构建按
时间
统计的
date
_
histogram
紧随其后。 为什么你会想用
date
_
histogram
呢?
假设你的数据带
时间
戳。 无论是什么数据(Apache 事件日志、股票买卖交易
时间
、棒球运动
时间
)只要带有
时间
戳都可以进行
date
_
histogram
分析。当你的数据有
时间
戳,你总是想在
时间
维度上构建指...
此处来简单
学习
一下 `
elasticsearch
` 的 `
date
_
histogram
`直方图
聚合
。它和普通的直方图`
histogram
`
聚合
差不多,但是`
date
_
histogram
`只可于 `日期或日期范围` 类型的值一起使用。
一
聚合
分析之 bucket(
分组
)&meteric(统计)
这一节内容主要是介绍下 bucket(
分组
)的概念 以及 meteric(
聚合
统计)概念,其实我们做过开发写过sql的就很容易理解了。然后我们结合案例进行练习和体会不同的bucket,以及不同的meteric,强化我们对
分组
和
聚合
统计的理解和记忆。
1.1 原理 bucket(
分组
)与metric(
聚合
group
Date
聚合
是作为 aggregations 字段的一部分被返回的,每一个 key 都与
分组
条件对应,我这里是根据1.5小时
分组
,key 将会显示
分组
的
时间
,doc_count 字段,将会告诉我们包含此项的文档数量。此处使用按天
分组
,可用的
时间
间隔表达式:year, quarter, month, week, day, hour, minute, second(年份、季度、月、周、日、小时、分钟、秒)。此处也可以根据小时
分组
,1.5h则用分钟来表示(90m)// 声明where 条件。...
专用于日期值的范围
聚合
。此
聚合
与常规范围
聚合
的主要区别在于,from和to值可以用日期数学表达式表示,还可以指定一种日期格式,通过该格式返回from和to响应字段。请注意,此
聚合
包括每个范围的from值,不包括to值。
目录1. 聚集查询2. 指标聚集2.1 平均值聚集2.1.1 avg 聚集2.2 计数聚集与极值聚集2.2.1 计数聚集2.2.2 极值聚集2.3 统计聚集2.3.1 stats 聚集2.3.2 extended_stats 聚集
文中使用的数据可以参考
Elasticsearch
数据检索和分析导入数据相关内容
1. 聚集查询
聚集查询(Aggregation)提供了针对多条文档的统计运算功能,它不是针对文档本身内容的检索,而是要将它们
聚合
到一起运算某些方面的特征值。
聚集查询与 SQL 语言中的聚集
PS→无奈:拥有梦想只是一种智力,实现梦想才是一种能力。
空闲之余就把先前做过的一个通过
ElasticSearch
的
聚合
来实现查询当月实际签到的天数记录一下,纯留下点记忆,大家勿喷。
1.如果不了解elsticsearch
聚合
的概念可以自行网上查看一番,起码懂得概念以及使用方法。
我们的业务是需要查看某个人某个月的签到天数,不管一天签到多少次,只计算一次。根据签到天数计算获取的补贴数据入库。