【手把手】ElasticSearch的聚合查询相关

导读:本篇文章讲解 【手把手】ElasticSearch的聚合查询相关,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Bucket agregations 分桶聚合

根据属性进行分桶,把具有某些相同属性的数据放到一起,相当于MySQl的group by。

语法:

GET product/_search
{
  “aggs”: {
    “<aggs_name>”: {
      “<agg_type>”: {
        “field”: “<field_name>”
      }
    }
  }
}

查询统计不同标签的商品数量

【手把手】ElasticSearch的聚合查询相关

 为什么是”field”: “tags.keyword”,而不是”field”: “tags”?

【手把手】ElasticSearch的聚合查询相关

aggs底层使用的数据结构是正排索引doc_values,而tags的type是text,text在创建的时候是默认不创建正排索引,所以如果tags.keyword直接写成tags则会报错,得指定tags.keyword才可以使用正排索引。

“tags”: {
    “type”: “text”,
    “fields”: {
        “keyword”: {
        “type”: “keyword”,
            “ignore_above”: 256
        }
    }
}

如果一定要对tags本身进行聚合分析怎么办呢,要将tags的fielddata设置为true:

【手把手】ElasticSearch的聚合查询相关

这个时候就可以直接使用”field”: “tags”:

【手把手】ElasticSearch的聚合查询相关

Metrics agregations 指标聚合

根据一些特定的指标进行数据的聚合,比如avg、max、min、sum等。

查询最贵、最便宜、平均价格三个指标

【手把手】ElasticSearch的聚合查询相关

查询所有指标

【手把手】ElasticSearch的聚合查询相关

按照name去重的数量

【手把手】ElasticSearch的聚合查询相关

Pipeline agregations 管道聚合

对聚合的结果再进行聚合,比如统计平均价格最低的商品分类,就得先按分类聚合,再按平均价格聚合,再按价格的高低聚合。

统计平均价格最低的商品分类

【手把手】ElasticSearch的聚合查询相关

统计不同类型的商品的不同级别的数量

【手把手】ElasticSearch的聚合查询相关

按照等级分桶,并输出每个桶的具体价格信息

【手把手】ElasticSearch的聚合查询相关

统计不同类型的商品、不同档次,各价格信息

【手把手】ElasticSearch的聚合查询相关

统计不同类型的商品、不同档次、各价格信息和标签信息

【手把手】ElasticSearch的聚合查询相关

统计每个商品类型中,不同等级分类商品中,平均价格最低的等级

【手把手】ElasticSearch的聚合查询相关

基于查询结果的聚合

管道聚合其实就是基于聚合结果的聚合,那么基于查询结果的聚合其实和管道聚合本质上一样的,先将需要查询的数据查询出来,再将查询的结果进行进一步的聚合运算。

【手把手】ElasticSearch的聚合查询相关【手把手】ElasticSearch的聚合查询相关【手把手】ElasticSearch的聚合查询相关

基于聚合的查询

绝不是直接将query写在aggs之后就行,即便这么写,也还是基于查询的聚合,本质上并不是基于聚合的查询。

【手把手】ElasticSearch的聚合查询相关

使用post_filter才是基于聚合后的结果进行查询。

【手把手】ElasticSearch的聚合查询相关

其实很多基于聚合的查询,本质上只是做一些简单的过滤,为了方便去看聚合的结果而已。

【手把手】ElasticSearch的聚合查询相关

图形图像聚合函数

histogram 柱状图或直方图

【手把手】ElasticSearch的聚合查询相关

设置:”keyed”: true,可以将区间的落差值作为key使用

【手把手】ElasticSearch的聚合查询相关

设置:”min_doc_count”: 1,只将doc_count>=1的显示出来

【手把手】ElasticSearch的聚合查询相关

date_histogram 柱状图或直方图

【手把手】ElasticSearch的聚合查询相关

interval已经被官方遗弃,建议使用fixed_interval或calendar_interval来进行日期的分类:

fixed_interval支持的粒度有:ms(毫秒)、s(秒)、m(分)、h(小时)、d(天),fixed_interval的灵活度很高,1d就是1天,10d就是10天。

【手把手】ElasticSearch的聚合查询相关

calendar_interval支持的粒度有:hour(小时)、day(天)、week(周)、month(月)、year(年),calendar_interval的跨度很大,从每小时到每年都可拿下。

【手把手】ElasticSearch的聚合查询相关

加上extended_bounds条件后,即使是0的数据也会被展示

【手把手】ElasticSearch的聚合查询相关

加上cumulative_sum条件后,可以将聚合的每个阶段的数据进行累计叠加

【手把手】ElasticSearch的聚合查询相关

percentile 百分位统计或饼状图

【手把手】ElasticSearch的聚合查询相关【手把手】ElasticSearch的聚合查询相关

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111908.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!