《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(2) https://developer.aliyun.com/article/1229244
2、最大值聚合 max
最大值聚合属于单值度量聚合,可从聚合文档中的数值字段返回最大值。
1)基础用法
获取订单中产品的最大售价,并定义 max_price 为最大售价的名字,该字段也将作为结果返回:
POST /order/_search?size=0 { "aggs" : { "max_price" : { "max" : { "field" : "price" } } } }
返回结果:
{ ... "aggregations" : { "max_price" : { "value" : 9999.2 } } }
2)缺失值
默认情况下,当文档中缺失计算字段值时,该文档将会被忽略,若我们希望使用这部分文档,可以通过设置 missing 参数。以下例子中,缺失字段的 price 将按照 0 来计算。
POST /order/_search?size=0 { "aggs" : { "max_price" : { "max" : { "field" : "price", "missing": 0 } } } }
3)Histogram fields
在直方图字段上计算最大值时,聚合的结果是 value 数组中所有数据的最大值,此时 count 数组中的数据将被忽略。
以存储不同网络的预聚合直方图和延迟度量的索引为例(数据参见 平均值聚合 avg 第3点):
POST /metrics_index/_search?size=0 { "aggs" : { "max_latency" : { "max" : { "field" : "latency_histo" } } } }
计算 latency_histo 字段最大值的方法为,找出每份文档中 value 的最大值,再进行比较得到所有文档中的最大值,因此上述结果为:
{ ... "aggregations": { "max_latency": { "value": 0.5 } } }
4)脚本
GET order/_search?size=0 { "size": 0, "runtime_mappings": { "price.adjusted": { "type": "double", "script": """ double price = doc['price'].value; if (doc['price'].value>20000) { price *= 0.8; } emit(price); """ } }, "aggs": { "max_price": { "max": { "field": "price.adjusted" } } } }
3、最小值聚合 min
最小值聚合属于单值度量聚合,可从聚合文档中的数值字段返回最小值。
1)基础用法
获取订单中产品的最低售价,定义最低售价名为 min_price,该字段也将作为结果返回:
POST /order/_search?size=0 { "aggs" : { "min_price" : { "min" : { "field" : "price" } } } }
返回结果:
{ ... "aggregations" : { "min_price" : { "value" : 7849.46 } } }
2)缺失值
默认情况下,当文档中缺失计算字段值时,该文档将会被忽略,若我们希望使用这部分文档,可以通过设置 missing 参数。以下例子中,缺失字段的 price 将按照 0 来计算,所以返回结果最小值为 0。
POST /order/_search?size=0 { "aggs" : { "min_price" : { "min" : { "field" : "price", "missing" : 0 } } } }
3)Histogram fields
在直方图字段上计算最小值时,聚合的结果是 value 数组中所有数据的最小值,此时 count 数组中的数据将被忽略。
以存储不同网络的预聚合直方图和延迟度量的索引为例(数据参见 平均值聚合 avg 第3点):
POST /metrics_index/_search?size=0 { "aggs" : { "min_latency" : { "min" : { "field" : "latency_histo" } } } }
计算 latency_histo 字段最小值的方法为,找出每份文档中 value 的最小值,再进行比较得到所有文档中的最小值,因此上述结果为:
{ ... "aggregations": { "min_latency": { "value": 0.1 } } }
4)脚本
GET order/_search?size=0 { "size": 0, "runtime_mappings": { "price.adjusted": { "type": "double", "script": """ double price = doc['price'].value; if (doc['price'].value < 200) { price *= 1.2; } emit(price); """ } }, "aggs": { "min_price": { "min": { "field": "price.adjusted" } } } }
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(4) https://developer.aliyun.com/article/1229240