赞
踩
ES聚合查询主要分为3类:指标聚合、桶聚合和管道聚合。
本文主要是介绍其中指标聚合的相关使用。
指标聚合 Metrics Aggregations
如果说桶聚合主要是用来做分组的,那么指标聚合就主要是用来做数据计算的
。
桶聚合和指标聚合一般都会配合使用。
类似SQL:统计订单表中每个用户的总订单金额。
select sum(t.money) from order t group by t.user
对应的DSL:
POST /order/_search { "size":0, "aggs" : { "group_user" : { "terms" : { "size": 5, "field" : "user", "order": { "sum_money" : "desc" } }, "aggs": { "sum_money": { "sum": {"field": "money"} } } } } }}
说明:
先采用名称为group_user的桶聚合实现根据user进行分组,然后通过子聚合sum_money对各个分组中的money进行求和。
通过order指定根据指标聚合sum_money的计算结果进行倒序排序。
通过aggs中的size限制只统计总订单金额排名前5的数据。
POST /exams/_search?size=0
{
"aggs": {
"avg_grade": { "avg": { "field": "grade" } }
}
}
使用脚本script:
通过script在查询时提取出运行时字段grade.corrected
POST /exams/_search?size=0 { "runtime_mappings": { "grade.corrected": { "type": "double", "script": { "source": "emit(Math.min(100, doc['grade'].value * params.correction))", "params": { "correction": 1.2 } } } }, "aggs": { "avg_corrected_grade": { "avg": { "field": "grade.corrected" } } } }
POST /sales/_search?size=0
{
"aggs": {
"max_price": { "max": { "field": "price" } }
}
}
POST /sales/_search?size=0
{
"aggs": {
"min_price": { "min": { "field": "price" } }
}
}
POST /sales/_search?size=0
{
"query": {
"constant_score": {
"filter": {
"match": { "type": "hat" }
}
}
},
"aggs": {
"hat_prices": { "sum": { "field": "price" } }
}
}
速率指标聚合只能在date_histogram
或 composite
聚合中使用。它计算每个存储桶中的文档或字段的速率。字段值可以从文档中的特定数值或直方图字段中提取。
GET sales/_search { "size": 0, "aggs": { "by_date": { "date_histogram": { "field": "date", "calendar_interval": "month" }, "aggs": { "my_rate": { "rate": { "unit": "year" } } } } } }
计算从聚合文档中提取的值数量的单值度量聚合。这些值可以从文档中的特定字段中提取,也可以由提供的脚本生成。通常,此聚合器将与其他单值聚合结合使用。
POST /sales/_search?size=0
{
"aggs" : {
"types_count" : { "value_count" : { "field" : "type" } }
}
}
返回:
{
...
"aggregations": {
"types_count": {
"value": 7
}
}
}
本文主要介绍了ES中指标聚合函数的使用。
桶聚合主要是用来做分组的,那么指标聚合就主要是用来做数据计算的
。
桶聚合和指标聚合一般都会配合使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。