一、简介
上文我们说到了聚合的三类聚合,其中包括指标聚合。
Metric aggregations:指标聚合是根据字段值计算量度(如总和或平均值)的量度聚合。
此系列中的聚合基于以某种方式从正在聚合的文档中提取的值来计算度量。这些值通常从文档的字段中提取(使用字段数据),但也可以使用脚本生成。
数值指标聚合是一种特殊类型的指标聚合,用于输出数值。一些聚合输出单个数值指标(例如 avg),称为单值数值指标聚合,其他聚合生成多个指标(例如统计数据),称为多值数值指标聚合。当单值和多值数值指标聚合用作某些存储桶聚合的直接子聚合时,这些聚合之间的区别将发挥作用(某些存储桶聚合使您能够根据每个存储桶中的数值指标对返回的存储桶进行排序),其实就是说指标聚合经常和桶聚合一起使用,就是分组之后求最大,平均之类的。类似于select count(1) from table group by name这样的一个逻辑。
我们本文就来具体来看一下如何使用指标聚合。
二、指标聚合
指标聚合里面有很多类型的指标,包括平均值,最大值,最小值,求和等等二十多种类型,我们就一一来看一下,在操作中体会他的使用。
1、Avg aggregation:均值聚合
一种单值度量聚合,用于计算从聚合文档中提取的数值的平均值。可以从文档中的特定数字或直方图字段中提取这些值。
1.1、聚合检索
我们的衣物索引中有20个衣服的信息,分别有各自的价格,我们可以使用均值聚合来求取它的价格平均值。
# 求取衣服售价的平均值
POST clothes/_search
{
"aggs": {
"avg_clothes_price": {
"avg": {
"field": "price"
}
}
}
}
我们看到它的语法形式就是把聚合逻辑放在aggs块下面,其中你可以为你的指标结果取个名字,我这里的名字是avg_clothes_price(类似于select avg(price) as avg_clothes_price).然后我们选择avg聚合器来对字段price来求取聚合结果。于是我们就得到了,
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 20,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "clothes",
"_id": "1",
"_score": 1,
"_source": {
"category": "T-shirt",
"name": "纯棉T恤",
"price": 19.99,
"brand": "品牌A",
"desc": "基础款纯棉T恤,适合日常穿着。",
"place_of_origin": "中国"
}
},
{
"_index": "clothes",
"_id": "2",
"_score": 1,
"_source": {
"category": "Jeans",
"name": "修身牛仔裤",
"price": 49.99,
"brand": "品牌B",
"desc": "耐穿的牛仔裤,修身款式。",
"place_of_origin": "越南"
}
},
{
"_index": "clothes",
"_id": "3",
"_score": 1,
"_source": {
"category": "Dress"