ES(8.1)认证工程师考题纲要参考如下

https://mp.weixin.qq.com/s/x7lMmMAo2563JysMJ8vgRQ

1、题目

明天咱们探讨的是《索引模板的创立与应用》

大体思路如下:分两局部解决、第一局部是先创立索引模板、第二局部应用索引模板。在创立索引模板之前咱们先了解一下什么事索引模板、而后咱们带着以下几个问题进行浏览本文

  • 什么是索引模版
  • 索引模版有什么用,应用场景有哪些
  • 索引模版如何创立
  • 如何应用索引模版

2、解答

2.1、什么是索引模版

索引模版是创立索引时主动利用提前设置好的settingsmappingsaliases,通过索引的名称进行匹配

对索引模版的更改时不会影响目前曾经依据索引模版创立的索引

2.2、索引模版有什么用,应用场景有哪些

应用索引模版能够省去创立索引时再次指定settingsmappingsaliases的步骤,具体的利用场景比拟罕用的就有日志索引。

需要如下:查问日志索引名称为log,每天依据当天日期生成索引(log-20221022),所有的索引应用雷同的settingsmappings,且alias指向最新日期的log索引那么咱们就能够应用索引模版来实现,索引模版如何创立呢,其实很简略,与一般的创立索引差异不大,具体如下

2.3、索引模版创立

创立索引须要参数,那么创立索引模版也有参数管制,能够应用的参数如下

  • index_patterns: 必须的参数,应用通配符定义匹配索引的规定
  • priority:可选的参数,索引模版的匹配优先级,如果不填默认0(最低优先级),多个模版时,优先匹配优先级高的模版
  • template:可选参数,然而我认为是必须的,少了这个参数,索引模版的意义在哪呢是不是,能够说是外围参数。能够配置索引的settingsmappingsaliases

    • settings

      索引的settings设置,可参考上一篇文章中settings的局部

    • mappings

      索引的mappings设置,可参考上一篇文章中mappings的局部

    • aliases

      对象模式,key是别名的名称,并且还反对如下参数

      • filter

        可选,对象类型,限度别名能拜访的文档

      • index_routing

        可选,字符串,索引操作时的路由值,如果指定会笼罩routing的值

      • is_hidden

        可选,布尔类型,如果设置为true,暗藏别名。默认false,该别名指定的所有索引必须有雷同的is_hidden

      • is_write_index

        可选,布尔类型,如果设置为true,该索引为别名的写索引

      • routing

        可选,字符串,索引和搜寻操作时的路由值

      • search_routing

        可选,字符串,搜寻操作时的路由值,如果指定会笼罩routing的值

  • version

    索引模版的版本号,Elasticsearch不会主动生成

  • composed_of

    可选,字符串数组,可选可应用的组件模版的有序数组。依照数组中组件模版的程序合并,最初一个模版具备最高的优先级

  • data_stream

    可选,对象类型,如果索引模版中蕴含该该对象,能够是空对象,则应用模版创立索引数据流和反对的索引

    反对如下参数

    • hidden:可选,布尔类型,如果为true,数据流暗藏,默认false
    • allow_custom_routing: 可选,布尔类型,如果为true,则数据流反对自定义路由,默认false
  • _meta

    可选,对象类型,该索引模版的用户元数据配置

通过下面几个参数即可创立一个可用的索引模版,创立一个根底可用的索引模版只须要必选参数即可,例如:

PUT /_index_template/log_template{  "index_patterns": "log*",  "priority": "1",  "template": {    "settings": {      "number_of_shards": "1",      "number_of_replicas": "1"    },    "mappings": {      "properties": {        "creater":{          "type":"keyword"        },        "module":{          "type":"keyword"        },        "content":{          "type":"text",          "fields":{            "keyword":{              "type":"keyword"            }          }        },        "createtime": {          "type": "date",          "format": "strict_date_optional_time||epoch_millis"        }      }    },    "aliases":{      "log":{}    }  }}  

2.4、应用索引模版

2.4.1、通过索引模版创立索引

以下面创立的索引模版为例,索引名以log结尾的索引都会主动应用索引模版创立

PUT /log-2022-10-22-01

此时查看生成的索引log-2022-10-22-01如下

GET /log-2022-10-22-01# 返回如下{  "log-2022-10-22-01" : {    "aliases" : {      "log" : { }    },    "mappings" : {      "properties" : {        "content" : {          "type" : "text",          "fields" : {            "keyword" : {              "type" : "keyword"            }          }        },        "creater" : {          "type" : "keyword"        },        "createtime" : {          "type" : "date"        },        "module" : {          "type" : "keyword"        }      }    },    "settings" : {      "index" : {        "routing" : {          "allocation" : {            "include" : {              "_tier_preference" : "data_content"            }          }        },        "number_of_shards" : "1",        "provided_name" : "log-2022-10-22-01",        "creation_date" : "1666523830900",        "number_of_replicas" : "1",        "uuid" : "WouYSIukSIGucYs_grWkZw",        "version" : {          "created" : "8010399"        }      }    }  }}

理论应用中不可能只有一个模版,那么咱们创立索引时该怎么抉择呢,上面咱们来一起测试下

2.4.2、同时匹配到多个索引模版怎么抉择

  • 首先在创立一个索引模版,匹配模式设置*,优先级设置2,该my_log_template模版createtime字段设置为keyword,下面log_template模版设置createtimedate类型,Elasticsearch如何抉择测试即知

    PUT /_index_template/my_log_template{  "index_patterns":"*",  "priority":"2",  "template":{    "mappings":{      "properties":{        "createtime":{          "type":"keyword"        },        "my_test_field":{          "type":"keyword"        }      }    }  }}
  • 创立索引查看生成的createtime类型

    PUT /log-2022-10-23-01GET /log-2022-10-23-01/_mapping# 返回如下{  "log-2022-10-23-01" : {    "mappings" : {      "properties" : {        "createtime" : {          "type" : "keyword"        },        "my_test_field" : {          "type" : "keyword"        }      }    }  }}

    能够看到前面创立的索引模版my_log_template优先级为2,索引匹配到多个模版时优先应用优先级高的模版

2.4.3、应用索引模版创立索引别名

在下面创立的索引模版log_template中,创立索引时会主动给索引增加别名log,别名操作的局部语句如下

# 增加别名,对log结尾的索引增加别名logsPOST _aliases{  "actions": [    {      "add": {        "index": "log-*",        "alias": "logs"      }    }  ]}# 删除别名,删除索引logs-nginx的别名logsPOST _aliases{  "actions": [    {      "remove": {        "index": "logs-nginx",        "alias": "logs"      }    }  ]}

2.4.4、组件模版创立

  • 创立组件模版settings

    PUT _component_template/zuiyu-settings{  "template": {    "settings": {      "index.lifecycle.name": "my-lifecycle-policy"    }  },  "_meta": {    "description": "Settings for ILM",    "my-custom-meta-field": "More arbitrary metadata"  }}
  • 创立组件模版mappings

    PUT _component_template/zuiyu-mappings{  "template": {    "mappings": {      "properties": {        "@timestamp": {          "type": "date",          "format": "date_optional_time||epoch_millis"        },        "message": {          "type": "wildcard"        }      }    }  },  "_meta": {    "description": "Mappings for @timestamp and message fields",    "my-custom-meta-field": "More arbitrary metadata"  }}
  • 应用组件模版创立索引模版

    如下创立的为数据流模版,蕴含了空对象data_stream,具体数据流的应用可关注公众号,获取后续文章的最新更新

    PUT _index_template/zuiyu-index-template{  "index_patterns": ["zuiyu-data-stream*"],  "data_stream": { },  "composed_of": [ "zuiyu-mappings", "zuiyu-settings" ],  "priority": 500,  "_meta": {    "description": "Template for my time series data",    "my-custom-meta-field": "More arbitrary metadata"  }}

2.4.5、索引模版的删除

DELETE /_template/<index-template># 例子中索引模版删除如下DELETE /_index_template/log_template

2.4.6、校验索引模版是否存在

# 存在返回200,不存在返回404HEAD /_index_template/log_template

2.4.7、 查看索引模版

GET /_template/<index-template>GET /_template/log_template

3、总结

通过下面的学习,咱们能够纯熟的进行索引模版的创立,组件模版的创立以及模版优先级,数据流模版,组件模版优先级等,大大的满足了日常工作中的须要,如果还想理解更多参数的细节问题能够查阅官网。醉鱼Java后续也会推出更底层的源码剖析等内容,感兴趣的道友能够关注一波一起成长

本文由mdnice多平台公布