ES(8.1)
认证工程师考题纲要参考如下
https://mp.weixin.qq.com/s/x7lMmMAo2563JysMJ8vgRQ
1、题目
明天咱们探讨的是《索引模板的创立与应用》
大体思路如下:分两局部解决、第一局部是先创立索引模板、第二局部应用索引模板。在创立索引模板之前咱们先了解一下什么事索引模板、而后咱们带着以下几个问题进行浏览本文
- 什么是索引模版
- 索引模版有什么用,应用场景有哪些
- 索引模版如何创立
- 如何应用索引模版
2、解答
2.1、什么是索引模版
索引模版是创立索引时主动利用提前设置好的settings
、mappings
和aliases
,通过索引的名称进行匹配
对索引模版的更改时不会影响目前曾经依据索引模版创立的索引
2.2、索引模版有什么用,应用场景有哪些
应用索引模版能够省去创立索引时再次指定settings
、mappings
、aliases
的步骤,具体的利用场景比拟罕用的就有日志索引。
需要如下:查问日志索引名称为log
,每天依据当天日期生成索引(log-20221022
),所有的索引应用雷同的settings
和mappings
,且alias
指向最新日期的log索引
那么咱们就能够应用索引模版
来实现,索引模版如何创立呢,其实很简略,与一般的创立索引差异不大,具体如下
2.3、索引模版创立
创立索引须要参数,那么创立索引模版也有参数管制,能够应用的参数如下
index_patterns
: 必须的参数,应用通配符定义匹配索引的规定priority
:可选的参数,索引模版的匹配优先级,如果不填默认0(最低优先级)
,多个模版时,优先匹配优先级高的模版template
:可选参数,然而我认为是必须的,少了这个参数,索引模版的意义在哪呢是不是,能够说是外围参数。能够配置索引的settings
,mappings
,aliases
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
模版设置createtime
为date
类型,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多平台公布