ES动态模板介绍
ES动态模板是指在创建索引之前提前预制索引mapping信息,叫做template,template通过pattern表达式与索引动态匹配;其他内容基本与创建索引时的指定的mapping类似。
ES动态模板作用
ES动态模板的配置,可以大大减轻创建每个索引创建时要但单独维护索引字段设置的压力;只需按照约定规则配置索引名称、字段名称就可以在创建索引时不考虑mapping维护问题。
template结构
template内容为标准json结构,具体内容结构大致如下:
{
//匹配索引名称,*为通配符,可以配置多个, 对于有固定后缀以及按照时间创建的索引特别方便
"index_patterns": ["index_name_pattern*"],
//template匹配优先级,值越小 优先级越高
"order": 0,
//索引版本号,仅用于外部管理,可不加
"version": 1001,
//索引设置信息 如副本、分片、分词器配置等
"settings": {
...
},
//动态别名配置
"aliases":{
//所有匹配索引全部添加对应别名
"alias1" : {},
//根据条件过滤,符合条件添加别名
"alias2" : {
"filter" : {
"term" : {"user" : "kimchy" }
},
"routing" : "kimchy"
},
//给每个索引添加 索引名称-alias 别名
"{index}-alias" : {}
},
//索引配置内容
"mappings": {
//索引type类型,7版本(包括7版本)之后取消了type, 7版本默认内置_doc
"type": {
//内置属性设置 默认下划线开头 如_source, _all等
"_source": {
"enabled": false
},
//日期格式化方式
"dynamic_date_formats":[
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd"
],
//动态字段属性配置 与创建索引时指定mapping类似, 同样可以使用*通配
"dynamic_templates": [{
//所有以Time结尾的字段都匹配为日期, 注意同一个字段只能有一种date_format格式
"time_field": {
"mapping":{
"type":"date"
},
"match":"*Time"
},
...
}],
//指定字段匹配
"properties": {
"host_name": {
"type": "keyword"
},
...
}
}
}
}
template API
- 新增/更新
#模板名称对应模板已存在时,会覆盖现有模板
PUT _template/模板名称
- 查询
#查询模板结构 模板名称可以使用*通配, 也可以使用逗号分隔多个,不指定时查询全部
GET /_template/模板名称
- 删除
#删除模板对以存在的索引及字段没有影响, 删除后索引动态添加的字段不会匹配已删除模板设置mapping
DELETE /_template/模板名称
template 匹配逻辑
template可以多匹配,即一个索引创建时可以同时匹配多个模板,此时不可避免的会出现冲突问题,ES template通过order字段决定模板匹配优先级,order字段值越小,优先级越高。