• es-aggregations模块学习总结


    我们的项目数据源是es,需要对数据进行按月,按周,按天,按小时聚合

    后来需求扩展,聚合方式,聚合字段都要做成可选,于是花了点时间读了一遍es官网API,由于矩阵和管道用不到,没有花时间去阅读API

    最常用的还是桶(bucket)和指标(metric)的聚合,这两个概念,对比关系型数据库做了一些类比(注意不是等价),

    es的聚合方式可以组合,甚至可以组合成非常复杂的聚合(复杂聚合一般专门用于分析,不会用于报表这样的需求)

    一般来讲,桶聚合分单桶和多桶,以及动态桶聚合三类,可以拿group by类比来理解(但不是仅仅group by)

    指标聚合,分单值和多值2类(特殊的不考虑,用的少)

    学习过程,应该先理解概念,类比下已有的知识,比如sql里面的count,sum,group by

    然后按照最常用的几种,比如桶聚合中的histogram3小类,range,复杂一点的composite(项目里面要用正是这个,复合聚合)

    指标聚合类型比较零散,看聚合类型名就能大概理解是做什么的

    下图是我整理的分类和关键点图:

     

     

     理解了概念和用处后,需要知道怎么用

    第一步,理解DSL聚合查询的结构

    "aggregations" : {
        "<aggregation_name>" : {
            "<aggregation_type>" : {
                <aggregation_body>
            }
            [,"meta" : {  [<meta_data_body>] } ]?
            [,"aggregations" : { [<sub_aggregation>]+ } ]?
        }
        [,"<aggregation_name_2>" : { ... } ]*
    }

    DSL语句都是json格式的

    1、最外层的aggregations可以理解成关键字,就像es普通查询的query关键字一样,这里用aggregations或者aggs,es均支持

    2、aggregation_name是需要指定的聚合名,比如price_count,price_avg,visit_agg等等

    3、aggregation_type,是要指定的具体的聚合类型,就是上图中的date_histogram,avg等等聚合

    4、aggregation_body,聚合的具体逻辑

    5、aggregations,子聚合,一个聚合类型下可以嵌套若干个子聚合

    6、aggregation_name2,第二个聚合,和第一个聚合并列

    第二步:理解每种聚合特有的属性意义和用法

    例如date_histogram有很多需要用到的属性,format,interval等等

    第三步:学会使用API,我用的java API,四个关键的类:

    1、 RestHighLevelClient

    2、 SearchRequest

    3、 SearchSourceBuilder

    4、 AggregationBuilder和QueryBuilder(聚合条件)

    官网有很多例子,几乎都可以现用,具体的聚合类型的用法,会在其他的博文中记录

  • 相关阅读:
    XMPP框架 微信项目开发之XMPP配置——MySQL数据库、MySQLworkbench、Openfire服务器的安装与配置
    Mac Mysql 启动关闭和重启命令、重新设置root密码 、 卸载
    CocoaPods安装使用 关键点
    CocoaPods的介绍、安装、使用和原理
    iOS 组件化架构漫谈
    将自己库添加Cocoapods支持
    Appium移动端自动化测试-安卓真机+模拟器启动
    Java学习第二十五天
    Java学习第二十四天
    Java学习第二十三天
  • 原文地址:https://www.cnblogs.com/yb38156/p/13906874.html
Copyright © 2020-2023  润新知