美文网首页
(四)ES基本概念入门3

(四)ES基本概念入门3

作者: 木人呆呆 | 来源:发表于2020-08-07 11:02 被阅读0次

    一、Index template

    1. Index template可以帮助你设定Mappings和settings,并按照一定的规则匹配到新建的索引之上

      • 模板仅在索引创建的时候才产生作用,并且不会影响已经创建的索引;
      • 可以设定多个模板,最终会被合并到一起;
      • 可以指定“order”的数值,控制“merging”的过程
    2. Index template工作方式
      当一个索引被创建的时候,在ES中会有一下过程:

      • ES首先使用默认的Mapping和Setting;
      • 应用order数值低的Index template进行设置;
      • 应用order数值高的index template进行设置,之前的设置会被覆盖;
      • 应用用户创建的Mapping和Setting,之前的设置被覆盖。

    看实例

    #Create a default template
    PUT _template/template_default
    {
      "index_patterns": ["*"],             //默认的index template,匹配所有的index
      "order" : 0,
      "version": 1,
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas":1
      }
    }
    
    PUT /_template/template_test            //自定义的index template,匹配所有以“test”开头的index
    {
        "index_patterns" : ["test*"],
        "order" : 1,
        "settings" : {
            "number_of_shards": 1,         //设置分片数与副本数量
            "number_of_replicas" : 2
        },
        "mappings" : {
            "date_detection": false,      //日期格式自动检测设置为false
            "numeric_detection": true
        }
    }
    
    //查询ES中所有以“temp”开头的index template
    GET /_template/temp*
    

    使用创建自定义的index template

    PUT testtemplate/_doc/1             //以test开头,自动适配上文中“template_test ”的 index template
    {
        "someNumber":"1",
        "someDate":"2019/01/01"
    }
    

    二、Dynamic template

    根据ES识别出来的数据类型,结合字段名称,来动态设定字段类型,例如可以有一下几种设置的方式:

    1. 所有的字符串类型都设定成keyword,或者关闭keyword字段;
    2. is开头的都设定成boolean;
    3. long_开头的都设置成long型。

    Dynamic template 是定义在某个索引的Mapping 中
    Dynamic template 有一个名称
    匹配规则是一个数组
    为匹配到的字段设置Mapping

    PUT my_index
    {
      "mappings": {
        "dynamic_templates": [
                {
            "strings_as_boolean": {
              "match_mapping_type":   "string",
              "match":"is*",                       //is开头的设置为boolean
              "mapping": {
                "type": "boolean"
              }
            }
          },
          {
            "strings_as_keywords": {
              "match_mapping_type":   "string",
              "mapping": {
                "type": "keyword"                  //字符串映射成keyword
              }
            }
          }
        ]
      }
    }
    
    
    PUT my_index/_doc/1
    {
      "firstName":"Ruan",
      "isVIP":"true"
    }
    
    GET my_index/_mapping
    

    三、ES聚合分析(Aggregation)

    ES除了搜索以外,还提供针对ES数据进行统计分析的功能,聚合分析支持嵌套

    聚合分类
    - Bucket Aggregation      一些列满足特定条件的文档的集合
    - Metric Aggregation     一些数学运算,可以对文档字段进行统计分析
    - Pipeline Aggregation    对其他聚合结果进行二次聚合
    - Matrix Aggregation    支持对多个字段的操作,并提供一个结果矩阵
    

    下面的例子,需要通过Kibana导入Sample Data的飞机航班数据。在kibana 开始界面,有导入的选项,选择即可导入

    #查看航班目的地的统计信息,增加平均,最高最低价格
    GET kibana_sample_data_flights/_search
    {
        "size": 0,
        "aggs":{
            "flight_dest":{
                "terms":{
                    "field":"DestCountry"
                },
                "aggs":{
                    "avg_price":{
                        "avg":{
                            "field":"AvgTicketPrice"
                        }
                    },
                    "max_price":{
                        "max":{
                            "field":"AvgTicketPrice"
                        }
                    },
                    "min_price":{
                        "min":{
                            "field":"AvgTicketPrice"
                        }
                    }
                }
            }
        }
    }
    
    

    四、总结





    相关文章

      网友评论

          本文标题:(四)ES基本概念入门3

          本文链接:https://www.haomeiwen.com/subject/jdgxdktx.html