Elasticsearch--Aggregation详细总结(聚合统计)
Elasticsearch的Aggregation功能也异常强悍。
Aggregation共分为三种:Metric Aggregations、Bucket Aggregations、 Pipeline Aggregations。下面将分别进行总结。
以下所有内容都来自官网:喜欢原汁原味的参看下方网址,不喜欢英文的参看本人总结。
官网(权威):https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-aggregations-metrics-avg-aggregation.html
#########################################
1、Metric Aggregations
1>Avg Aggregation #计算出字段平均值
- {
- "aggs" : {
- "avg_grade" : { "avg" : { "field" : "grade" } }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"avg_grade": {
"avg": {
"field": "grade"
}
}
}
}
参数:search_type=count 表示只返回aggregation部分的结果。
2>Cardinality Aggregation#计算出字段的唯一值。相当于sql中的distinct
- {
- "aggs" : {
- "author_count" : {
- "cardinality" : {
- "field" : "author"
- }
- }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"author_count": {
"cardinality": {
"field": "author"
}
}
}
}
3>Extended Stats Aggregation #字段的其他属性,包括最大最小,方差等等。
- {
- "aggs" : {
- "grades_stats" : { "extended_stats" : { "field" : "grade" } }
- }
- }
例子:GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"grades_stats": {
"extended_stats": {
"field": "grade"
}
}
}
}
返回值:
- {
- ...
- "aggregations": {
- "grade_stats": {
- "count": 9,
- "min": 72,
- "max": 99,
- "avg": 86,
- "sum": 774,
- "sum_of_squares": 67028,
- "variance": 51.55555555555556,
- "std_deviation": 7.180219742846005,
- "std_deviation_bounds": {
- "upper": 100.36043948569201,
- "lower": 71.63956051430799
- }
- }
- }
- }
4>Geo Bounds Aggregation #计算出所有的地理坐标将会落在一个矩形区域。比如说朝阳区域有很多饭店,我就可以用一个矩形把这些饭店都圈起来,看看范围。
- {
- "query" : {
- "match" : { "business_type" : "shop" }
- },
- "aggs" : {
- "viewport" : {
- "geo_bounds" : {
- "field" : "location",
- "wrap_longitude" : true
- }
- }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"viewport": {
"geo_bounds": {
"field": "location",
"wrap_longitude": true
}
}
}
}
返回值:
- {
- ...
- "aggregations": {
- "viewport": {
- "bounds": {
- "top_left": {
- "lat": 80.45,
- "lon": -160.22
- },
- "bottom_right": {
- "lat": 40.65,
- "lon": 42.57
- }
- }
- }
- }
- }
注释:这个矩形区域左上角坐标,和右下角坐标已经给出。也就是说你查出来的数据将会都落在这个地理范围内。
5>Geo Centroid Aggregation #计算出所有文档的大概的中心点。比如说某个地区盗窃犯罪很多,那我这样就可以看到这片区域到底哪个点(街道)偷盗事件最猖狂。
- {
- "query" : {
- "match" : { "crime" : "burglary" }
- },
- "aggs" : {
- "centroid" : {
- "geo_centroid" : {
- "field" : "location"
- }
- }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"centroid": {
"geo_centroid": {
"field": "location"
}
}
}
}
6>Max Aggregation #求最大值
- {
- "aggs" : {
- "max_price" : { "max" : { "field" : "price" } }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"max_price": {
"max": {
"field": "price"
}
}
}
}
7>Min Aggregation #求最小值
- {
- "aggs" : {
- "min_price" : { "min" : { "field" : "price" } }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"min_price": {
"min": {
"field": "price"
}
}
}
}
8>Percentiles Aggregation #百分比统计。可以看出你网站的所有页面。加载时间的差异。
- {
- "aggs" : {
- "load_time_outlier" : {
- "percentiles" : {
- "field" : "load_time"
- }
- }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"load_time_outlier": {
"percentiles": {
"field": "load_time"
}
}
}
}
返回:可以看出这个网站75%页面在29毫秒左右就加载完毕了。有5%的页面超过了60毫秒。
- {
- ...
- "aggregations": {
- "load_time_outlier": {
- "values" : {
- "1.0": 15,
- "5.0": 20,
- "25.0": 23,
- "50.0": 25,
- "75.0": 29,
- "95.0": 60,
- "99.0": 150
- }
- }
- }
- }
9>Percentile Ranks Aggregation #看看15毫秒和30毫秒内大概有多少页面加载完。
- {
- "aggs" : {
- "load_time_outlier" : {
- "percentile_ranks" : {
- "field" : "load_time",
- "values" : [15, 30]
- }
- }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"load_time_outlier": {
"percentile_ranks": {
"field": "load_time",
"values": [
15,
30
]
}
}
}
}
返回:看出15毫秒时大概92%页面加载完毕。30毫秒时基本都加载完成。
- {
- ...
- "aggregations": {
- "load_time_outlier": {
- "values" : {
- "15": 92,
- "30": 100
- }
- }
- }
- }
10>Stats Aggregation #最大、最小、和、平均值。一起求出来
- {
- "aggs" : {
- "grades_stats" : { "stats" : { "field" : "grade" } }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"grades_stats": {
"stats": {
"field": "grade"
}
}
}
}
11>Sum Aggregation #求和
- "aggs" : {
- "intraday_return" : { "sum" : { "field" : "change" } }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"intraday_return": {
"sum": {
"field": "change"
}
}
}
}
12>Top hits Aggregation #较为常用的统计。获取到每组前n条数据。相当于sql 中 group by 后取出前n条。
- {
- "aggs": {
- "top-tags": {
- "terms": {
- "field": "tags",
- "size": 3
- },
- "aggs": {
- "top_tag_hits": {
- "top_hits": {
- "sort": [
- {
- "last_activity_date": {
- "order": "desc"
- }
- }
- ],
- "_source": {
- "include": [
- "title"
- ]
- },
- "size" : 1
- }
- }
- }
- }
- }
- }
例子:取100组,每组只要第一条。为了见bain没用order和_source,请自行测试他们。
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"all_interests": {
"terms": {
"field": "zxw_id",
"size": 100
},
"aggs": {
"top_tag_hits": {
"top_hits": {
"size": 1
}
}
}
}
}
}
14>Value Count Aggregation #数量统计,看看这个字段一共有多少个不一样的数值。
- {
- "aggs" : {
- "grades_count" : { "value_count" : { "field" : "grade" } }
- }
- }
例子:
GET index/type/_search?search_type=count
{
"query": {
"match_all": {}
},
"aggs": {
"grades_count": {
"value_count": {
"field": "grade"
}
}
}
}
2、Bucket Aggregations 这是第二种类型的统计(用的也是最多的,最实用的。)。后续也是抄写,各位自己看吧。有问题需要讨论的=》1250134974@qq.com发邮件.
网站:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-aggregations-bucket-children-aggregation.html
3、Pipeline Aggregations#这是第三中类型的聚合。
Elasticsearch--Aggregation详细总结(聚合统计)的更多相关文章
- 小试牛刀ElasticSearch大数据聚合统计
ElasticSearch相信有不少朋友都了解,即使没有了解过它那相信对ELK也有所认识E即是ElasticSearch.ElasticSearch最开始更多用于检索,作为一搜索的集群产品简单易用绝对 ...
- Elasticsearch 第六篇:聚合统计查询
h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 1 ...
- java操作elasticsearch实现组合桶聚合
1.terms分组查询 //分组聚合 @Test public void test40() throws UnknownHostException{ //1.指定es集群 cluster.name 是 ...
- ElasticSearch 2 (36) - 信息聚合系列之显著项
ElasticSearch 2 (36) - 信息聚合系列之显著项 摘要 significant_terms(SigTerms)聚合与其他聚合都不相同.目前为止我们看到的所有聚合在本质上都是简单的数学 ...
- ElasticSearch 2 (29) - 信息聚合系列之测试驱动
ElasticSearch 2 (29) - 信息聚合系列之测试驱动 摘要 我们可以用以下几页定义不同的聚合和它们的语法,但学习聚合的最佳途径就是用实例来说明.一旦我们获得了聚合的思想,以及如何合理地 ...
- elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)
一.聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值.最小值,计算和.平均值等.ES作为 ...
- ElasticSearch 2 (37) - 信息聚合系列之内存与延时
ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...
- ElasticSearch 2 (38) - 信息聚合系列之结束与思考
ElasticSearch 2 (38) - 信息聚合系列之结束与思考 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 本小节涵盖了许多基本理论以及很多深入的技 ...
- ElasticSearch 2 (35) - 信息聚合系列之近似聚合
ElasticSearch 2 (35) - 信息聚合系列之近似聚合 摘要 如果所有的数据都在一台机器上,那么生活会容易许多,CS201 课商教的经典算法就足够应付这些问题.但如果所有的数据都在一台机 ...
随机推荐
- iOS 让视图UIView 单独显示某一侧的边框线
有时候需要让view显示某一侧的边框线,这时设置layer的border是达不到效果的.在网上查阅资料发现有一个投机取巧的办法,原理是给view的layer再添加一个layer,让这个layer充当边 ...
- 什么是JDK?什么是JRE?JDK与JRE的区别和用途
一.编程环境与运行环境 JDK(Java Development Kit)称为Java开发包或Java开发工具.是一个编写Java的Applet小程序和应用程序的程序开发环境.JDK是整个Java的核 ...
- CVE-2017-8464 分析
目录 CVE-2017-8464(stuxnet 3.0) 分析 0xFF 前言 0x00 分析工具 0x01 漏洞复现 1).生成一个DLL用于测试 2).构造一个恶意的lnk二进制文件 3).RU ...
- VSCode 首次打开提示“Git installation not found.”解决方案
※前提大家先在本地安装好相应的git版本(下载地址:https://www.git-scm.com/download/) 一.找到“默认用户设置”
- PHP匿名函数
PHP匿名函数 匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值. 举例: &l ...
- 【teradata】强制解锁
使用加锁用户释放锁,也可以用其它用户使用如下语句强制解锁 Release lock (pdm_data ),Override
- 别老扯什么hadoop,你的数据根本不够大
本文原名“Don't use Hadoop when your data isn't that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过 ...
- centos7下安装docker(18docker日志---docker logs)
在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要,考虑到容器的短暂和不固定周期,当我们需要排查问题的时候容器可能不在了.因此,一套集中式的日志管理系统是生产环境中不 ...
- redis配置环境变量
直接上图不解释 redis安装路径,我的电脑右击属性 窗口+R键,输入cmd回车,输入redis-server.exe 回车 再开一个命令窗口,窗口+R键,输入cmd回车,输入 redis-cli. ...
- 【vue】vue中引入jquery
简洁版: 第一步:首先在package.json中输入"jquery":"^3.2.1",其中“3.2.1”为jquery版本号,按需修改 注:package. ...