在日常中,除了使用正常的长讯之外,我们还会涉及到在Elasticsearch中进行数据统计。在elasticsearch中支持的聚合统计种类有:度量聚合统计和多桶型聚合统计。
度量聚合统计
是指一组文档的统计分科,可以得到最大值,最小值,平均值等结果
分桶型聚合统计
是指将匹配的文档切分为一个或多个桶,然后统计每个桶里面的文档数量
本篇文章主要介绍的是度量聚合统计。下面我们来演示一下。
一、准备一份indexmapping
put /devices { "mappings": { "properties": { "device_uuid": { "type": "keyword" }, "device_name": { "type": "keyword" }, "device_category": { "type": "integer" }, "device_score": { "type": "double" }, "device_cts": { "type": "long" } } }, "settings": { "index": { "number_of_shards": "1", "number_of_replicas": "0" } } }
这里我们填写了设备名称,设备分类,设备分数,设备时间等几个参数,分别作用于不同的类型,用来演示接下来的聚合计算。
二、向devices索引里面插入数据
post /devices/_doc/1 {"device_uuid":"111","device_name":"设备111","device_category":"1","device_score":"1.01","device_cts":1669433306000} post /devices/_doc/2 {"device_uuid":"222","device_name":"设备222","device_category":"1","device_score":"1.02","device_cts":1669433306000} post /devices/_doc/3 {"device_uuid":"333","device_name":"设备333","device_category":"1","device_score":"1.03","device_cts":1669433306000} post /devices/_doc/4 {"device_uuid":"444","device_name":"设备444","device_category":"2","device_score":"1.04","device_cts":1669433306000} post /devices/_doc/5 {"device_uuid":"555","device_name":"设备555","device_category":"2","device_score":"1.05","device_cts":1669433306000} post /devices/_doc/6 {"device_uuid":"666","device_name":"设备666","device_category":"2","device_score":"1.06","device_cts":1669433306000} post /devices/_doc/7 {"device_uuid":"777","device_name":"设备777","device_category":"3","device_score":"1.07","device_cts":1669433306000} post /devices/_doc/8 {"device_uuid":"888","device_name":"设备888","device_category":"3","device_score":"1.08","device_cts":1669433306000} post /devices/_doc/9 {"device_uuid":"999","device_name":"设备999","device_category":"3","device_score":"1.09","device_cts":1669433306000}
存储数据的结果是:
三、使用度量聚合计算,求整个库的device_score的最大值,最小值,平均值,总和
post /devices/_search { "size": 0, "aggs": { "min_price": { "min": { "field": "device_score" } }, "max_price": { "max": { "field": "device_score" } }, "avg_price": { "avg": { "field": "device_score" } }, "sum_price": { "sum": { "field": "device_score" } } } }
可以看到数据被正确的计算出来了。
除了上面直接聚合之外,我们还可以添加查询条件,例如:
post /devices/_search { "size": 0, "query": { "match_all": {} }, "aggs": { "min_price": { "min": { "field": "device_score" } }, "max_price": { "max": { "field": "device_score" } }, "avg_price": { "avg": { "field": "device_score" } }, "sum_price": { "sum": { "field": "device_score" } } } }
备注:
1、在进行度量聚合计算的时候,这边都在整个索引库和整个查询条件结果里面进行计算。
2、在度量聚合计算里面,可以单独进行聚合计算,也可以根据条件进行查询,然后在查询结果里面进行聚合。
3、使用度量聚合计算对种类这些是没有区分的,全是在一个结果集里面。
4、在使用聚合计算的时候如果涉及到小数会产生精度问题。
还没有评论,来说两句吧...