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

一、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;

    如下图所示:

    

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

二、Index Template与Dynamic Template使用

  1、Index Template

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

  

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

  

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

  

  2、Dynamic Template

   创建的索引进行mappings设置

  

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

  

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

  

三、聚合的说明(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

    

    2)Metric Aggregation

    

    

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

    大家可关注我的公众号

     

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

原文地址:https://www.cnblogs.com/supersnowyao/p/11196761.html

时间: 2024-08-18 09:17:12

ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探的相关文章

elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)

一.聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值.最小值,计算和.平均值等.ES作为搜索引擎兼数据库,同样提供了强大的聚合分析能力. 对一个数据集求最大.最小.和.平均值等指标的聚合,在ES中称为指标聚合   metric 而关系型数据库中除了有聚合函数外,还可以对查询出的数据进行分组group by,再在组上进行指标聚合.在 ES 中group by 称为分桶,桶聚合 bucke

Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)

版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内容用于商业用途,将保留追究其法律责任的权利.如果有问题,请以邮箱方式联系作者([email protected]). 理解oracle索引扫描类型的特点以及具体触发的条件,对于通过合理地使用索引,进行sql优化至关重要(例如组合索引的引导列的选择问题). 在总结索引扫描类型前,需要再次强调关于索引特

Elasticsearch 【索引模板 index templates】

https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-templates.html 一. 索引模板,定义模板,当新索引创建时,自动匹配,并应用定义的模板 新增索引模板(index templates) 我们新建一个索引模板template_1 设置它的主分片为1个.类型有type1且_source disabled PUT /_template/template_1 {   "template": &qu

Mysql学习笔记(八)索引

原文:Mysql学习笔记(八)索引 PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日...继续学习数据库... 学习内容: 索引.... 索引的优点: 1.通过创建唯一索引,可以保证数据库每行数据的唯一性... 2.使查找的速度明显加快... 3.当使用分组和排序进行查询时,可以缩短时间... 索引的缺点: 1.维护索引需要耗费数据库的资源... 2.索引需要占用磁盘空间... 3.对表进行增删改的时候,由于索引的存在,时间会有所增加... 索引的分类... 普通索引和唯一索引

Elasticsearch学习之深入聚合分析二---案例实战

以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析,首先建立电视销售的索引,然后 添加几条销售记录 PUT /tvs { "mappings": { "sales": { "properties": { "price": { "type": "long" }, "color": { "type"

Elasticsearch学习之深入聚合分析四---案例实战

1. 需求:比如有一个网站,记录下了每次请求的访问的耗时,需要统计tp50,tp90,tp99 tp50:50%的请求的耗时最长在多长时间tp90:90%的请求的耗时最长在多长时间tp99:99%的请求的耗时最长在多长时间 PUT /website { "mappings": { "logs": { "properties": { "latency": { "type": "long"

Elasticsearch之索引模板

解决的问题 当索引类型和配置信息都一样,就可以使用索引模板来处理,不然我们就会手动创建索引. 创建索引模板 PUT _template/2019 { "index_patterns": ["20*", "product1*"], "settings":{ "number_of_shards": 2, "number_of_replicas": 1 }, "mappings&qu

Elasticsearch学习之深入聚合分析1--基本概念

首先明白两个核心概念:bucket和metric 1. bucket:一个数据分组 1 city name 2 3 北京 小李 4 北京 小王 5 上海 小张 6 上海 小丽 7 上海 小陈 基于city划分buckets,划分出来两个bucket,一个是北京bucket,一个是上海bucket 北京bucket:包含了2个人,小李,小王上海bucket:包含了3个人,小张,小丽,小陈 按照某个字段进行bucket划分,那个字段的值相同的那些数据,就会被划分到一个bucket中,有一些mysql

Elasticsearch学习之深入聚合分析三---案例实战

1. 统计指定品牌下每个颜色的销量 任何的聚合,都必须在搜索出来的结果数据中进行,搜索结果,就是聚合分析操作的scope GET /tvs/sales/_search { "size": 0, "query": { "term": { "brand": { "value": "小米" } } }, "aggs": { "group_by_color"