ES之API系列--index template(索引模板)的用法(有实例)
本文介绍ElasticSearch的index template(索引模板)的用法(有实例)。
原文网址:ES之API系列--index template(索引模板)的用法(有实例)_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍ElasticSearch的index template(索引模板)的用法(有实例)。
官网网址
https://www.elastic.co/guide/en/elasticsearch/reference/8.0/index-templates.html
索引模板的作用
作用概述
在新建索引时,如果索引名字与索引模板的通配符匹配,那么就使用索引模板的设置(_setting、_mapping等)。
- 模板仅在索引创建时才会生效,而且修改模板不会影响现有的索引。
- 可以指定"priority"的数值,如果新建的索引匹配到了多个模板,则使用priority最高的那个(priority值最小)。
- 7.8之前的版本是"order"字段。会对匹配到的多个模板进行合并,如果一个字段在多个模板中,则取order比较小(优先级高)的那个。
应用场景
- 为将来的动态映射的索引进行限制
- 例如:有多个系统写入日志索引,每天生成一个新索引,采用动态映射的方式。原先系统的时间是yyyy-MM-dd HH:mm:ss,创建索引后动态映射的日期格式为:“"format":"strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"”,新系统以yyyy-MM-dd HH:mm:ss.SSS格式写进去时会报错。
- 解决方案:直接将该日期字段改为:"format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS"。创建索引时会支持新格式。
- 为创建索引提供便利
- 例如:可以在模板设置好number_of_shards,number_of_replicas,创建索引时就自动使用模板的配置,不需要再设置了。
版本的区别
7.8之后的命令是:_index_template
7.8之前的命令是:_template
用法完全一样。本文介绍7.8及之后的命令。
创建与更新索引模板
创建和更新的命令是一样的。如果不存在则创建,如果存在则更新。
简洁方法(_index_template)
PUT _index_template/template1
{
"index_patterns": ["te*", "bar*"],
"template": {
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss.SSS"
}
}
},
"aliases": {
"mydata": { }
}
},
"priority": 10,
"version": 3,
"_meta": {
"description": "my custom"
}
}
上边这个模板设置了index_patterns 为 te* 和bar*意思就是:te或bar开头的索引在创建时都会使用这个模板。
复杂方法(_index_template+_component_template)
PUT _component_template/component_template1
{
"template": {
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
}
}
}
}
}
PUT _component_template/other_component_template
{
"template": {
"mappings": {
"properties": {
"ip_address": {
"type": "ip"
}
}
}
}
}
PUT _index_template/template_1
{
"index_patterns": ["te*", "bar*"],
"template": {
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss.SSS"
}
}
},
"aliases": {
"mydata": { }
}
},
"priority": 10,
"composed_of": ["component_template1", "other_component_template"],
"version": 3,
"_meta": {
"description": "my custom"
}
}
index_template 创建时,如果它包含的 component_template与component_template 或 component_template与index_template 中properties存在重复的属性,则index_template创建会报错。
查看索引模板
查看所有索引模板
GET _index_template
示例
查看单个索引模板
GET _index_template/template_name
示例
查看多个索引模板(通配符)
GET _index_template/template_pattern
示例
查看组件模板
GET _component_template/component_template_name
删除索引模板
删除索引模板
DELETE _index_template/template_name
删除组件模板
DELETE _component_template/component_template_name
日期检测与数字检测
概述
如果某个字段没有设置映射,那么在新建文档时,会自动根据字段来生成映射,比如:日期和数字。
示例
- 如果日期字段符合“yyyy-MM-dd HH:mm:ss.SSS"格式,就自动将该字段的type设置为date类型,并且format会包含“yyyy-MM-dd HH:mm:ss.SSS”这种格式。
- 如果字段是个数字,则自动将该字段的type设置为Long之类的类型。
配置方法
默认这种类型检测是开启的,配置方法如下:
PUT _index_template/template_name
{
"index_patterns": ["test*"],
"priority": 1,
"settings": {
"number_of_shards": 1,
"number_of_replicas": 2
},
"mappings": {
"date_detection": false,
"numeric_detection": true
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)