聚合分为三大类:
- 度量聚合:在一组文档中对某一个数字字段进行计算得出指标值
- 分组聚合:创建多个分组,每个分组都关联一个关键字和相关文档标准。当聚合执行的时候,所有的分组会根据自身标准评估每一个符合的文档。(分组聚合可以嵌套一个或者多个字聚合)
- 管道聚合:这一类聚合的数据源是其他聚合的输出,然后进行相关指标的计算。
度量聚合
在一组文档中对某一个数字字段进行计算得出指标值
1.平均值聚合
{
"size":0,
"aggs":{
"avg_grade":{
"avg":{
"field":"grade"
}
}
}
}
size:0 表示只显示聚合结果
1.1 使用脚本
{
"size":0,
"aggs":{
"avg_grade":{
"avg":{
"script":"doc['grade'].value"
}
}
}
}
1.2 文档值脚本
可以对文档中具体某列的值用脚本进行再次计算
{
"size":0,
"aggs":{
"avg_correction_grade":{
"avg":{
"field":"grade",
"script":{
"inline":"_value * params.correction",
"params":{
"correction": 2
}
}
}
}
}
}
1.3 默认值
当某文档缺失值时,会被忽略的,但是可以设置默认值
{
"size":0,
"aggs":{
"avg_correction_grade":{
"avg":{
"field":"grade",
"missing":0
}
}
}
}
2 基数聚合
{
"size":0,
"aggs":{
"price_count":{
"cardinality":{
"field":"price"
}
}
}
}
相当于 聚合价格不同 总数
3. 最大、最小、和、计数聚合
{
"size":0,
"aggs":{
"price_max":{
"max":{
"field":"price"
}
},
"price_min":{
"min":{
"field":"price"
}
},
"price_sum":{
"sum":{
"field":"price"
}
},
"price_count":{
"value_count":{
"field":"price"
}
}
}
}
4. 统计聚合
统计聚合:包含最小、最大、和、平均值、基数
{
"size":0,
"aggs":{
"stats_grade":{
"stats":{
"field":"grade"
}
}
}
}
5. 百分比聚合
通常用于极端值查询
{
"size":0,
"aggs":{
"loadTime_percentiles":{
"percentiles":{
"field":"loadTime"
}
}
}
}
获取加载时间比例值
6. 百分比分级聚合
数据由网站加载时间组成,规定95%的页面在15ms内完成加载,99%的页面在20ms内完成加载
{
"size":0,
"aggs":{
"loadTime_outlier":{
"percentile_ranks":{
"field":"loadTime",
"values":[15,30]
}
}
}
}
返回:看出15毫秒时大概92%页面加载完毕。30毫秒时基本都加载完成。
"aggregations": {
"load_time_outlier": {
"values" : {
"15": 92,
"30": 100
}
}
}