欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

程序员文章站 2023-09-08 13:23:32
一、Index Template与Dynamic Template的概念 1、Index Template:它是用来根据提前设定的Mappings和Settings,并按照一定的规则,自动匹配到新创建的索引上。 1)模板仅是一个索引被创建时才会起作用,修改模板并不会影响已创建的索引; 2)可以设定多 ......

一、index template与dynamic template的概念

  1、index template:它是用来根据提前设定的mappings和settings,并按照一定的规则,自动匹配到新创建的索引上。

    1)模板仅是一个索引被创建时才会起作用,修改模板并不会影响已创建的索引;

    2)可以设定多个索引模板,这些设置会被merge在一起;

    3)通过指定order的数值,控制merge的过程;

  2、index template的工作方式如下:

    当一个索引被创建时,会执行如下操作:

    1)应用elasticsearch默认的mappings和settings;

    2)应用order数值低的index template中的设定;

    3)应用order数值高的index template中的设定,之前的设定会被覆盖;

    4)创建索引时,用户此时进一步指定了索引的mappings和settings,那么覆盖之前模板中的设定;

  3、dynamic template:根据elasticsearch识别的数据类型,结合字段名称,动态设定字段类型。

    1)例如:所有的字符串类型可以设定成keyword,或者关闭keyword字段;

    2)例如:凡是is开头的字段都设置成boolean;

    3)例如:凡是long开头的都设置成long;

    如下图所示:

    ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    dynamic template是定义在索引的mappings中的,有一个模板名称,匹配规则是一个数组,同时可以将符合规则的字段进行mapping。

二、index template与dynamic template使用

  1、index template

    1)通过创建一个dynamic mapping的索引,会发现日期类型推断成功,而数值类型被推断成text类型。

  ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    2)创建一个可以识别以test字符开头的索引模板,同时将日期识别设置为false,将数值识别设置为true。会发现日期会推断为text类型,数值类型推断正常。

  ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    3)在创建索引时,设置settings的值,会覆盖模板设置信息。

  ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

  2、dynamic template

   创建的索引进行mappings设置

  ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

  通过对mapping信息的读取可以发现,is开头的字段是boolean类型,duty字段是keyword类型,匹配name开头的字段,将信息可以copy_to到fullname字段中,不匹配middle后缀的字段信息。

  ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

  当对fullname字段搜索关于middle字段的信息时,搜索不到结果,当搜索first或者lastname时,可以搜索到结果。

  ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

三、聚合的说明(aggregation)

  1、elasticsearch聚合的优势

    1)elasticsearch除了搜索外,还提供了针对elasticsearch数据进行统计分析的功能;

    相对于hadoop而言,elasticsearch在这方面实时性高,比hadoop的t+1更及时。

    2)通过聚合,会得到一个数据的概览,这样就可以分析和总结全套的数据,而不是仅仅能寻找单个文档;

    3)易用性,只需要一条语句,就可以从elasticsearch中得到分析结果,从而避免在客户端实现分析逻辑;

   2、聚合的分类

    1)bucket aggregation:一些列满足特定条件的文档集合,其相当于sql中的group by;

    2)metric aggregation:一些数学运算,可以对文档字段进行统计分析;

      其相当于sql中对于字段进行运算的函数,如sum、count等。它除了可以在字段上进行计算,还可以在脚本产生的结果上进行计算。

      大多数metric是数学计算,输出一个值,如:min/max/sum/avg/cardinality。

      部分支持输出多个值,如:stats/percentiles/percentile_ranks。

    3)pipeline aggregation:对其他的聚合结果进行二次聚合;

    4)matrix aggregation:支持对多个字段的操作并提供一个结果矩阵;

   3、聚合的使用

    1)bucket aggregation

     ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    2)metric aggregation

     ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

      注意:在做聚合分析时,应将aggs前面的size设置为0,否则会返回查询结果,而不是聚合结果。如果写成20,聚合结果也能统计出来,只是在查询结果的后面。

 

     大家可关注我的公众号 

     ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探 

    知识学习来源:阮一鸣:《elasticsearch核心技术与实战》