Elasticsearch黑鸟教程22:索引模板的详细介绍
1、索引模板简介
在创建索引时,为每个索引写定义信息可能是一件繁琐的事情,ES提供了索引模板功能,用户可以定义一个索引模板,在模板中定义好settings、mapping以及一个模式来匹配创建的索引。需要注意的是:模板只在索引创建时被参考,修改模板不会影响已创建的索引。
索引模板,英文名为Index Template。它是一种机制,这种机制允许我们定义一种模板,这种模板当新索引创建时将被自动应用。模板包含settings和mapping,以及这个模板是否可被应用于新的索引。
索引模板有以下限制:
(1)索引模板仅在一个索引新创建时才起作用,修改模板不会影响已创建的索引。
(2)可以设定多个索引模板,这些索引模板的设置将被merge在一起。
(3)可以通过对索引模板指定order的数值,来控制merge的过程。
2、索引模板的定义
{
"order": 0, // 模板优先级
"template": "sample_info*", // 模板匹配的名称方式
"settings": {...}, // 索引设置
"mappings": {...}, // 索引中各字段的映射定义
"aliases": {...} // 索引的别名
}
3、创建索引模板
接下来,我们创建两个模板:template_default 和 template_test。
# 创建一个默认模板,模板名为 template_default
# 这个模板匹配所有的索引,它的 order 属性值为 0。索引创建时将被设置一个分片,一个副本。
curl -X PUT -H 'Content-Type: application/json' 'localhost:9200/_template/template_default' -d '
{
"index_patterns": ["*"],
"order" : 0,
"version": 1,
"settings": {
"number_of_shards": 1,
"number_of_replicas":1
}
}
'
# 创建一个模板,模板名为 template_test
# 这个模板匹配test开头的索引,它的order属性值为1。索引创建时将被设置一个分片,两个副本。
# 并且,date类型自动检测功能将关闭,数字自动检测功能将开启。
curl -X PUT -H 'Content-Type: application/json' 'localhost:9200/_template/template_test' -d '
{
"index_patterns" : ["test*"],
"order" : 1,
"settings" : {
"number_of_shards": 1,
"number_of_replicas" : 2
},
"mappings" : {
"date_detection": false,
"numeric_detection": true
}
}
'
4、查看模板:
curl -X GET "localhost:9200/_template/template_default?pretty"
curl -X GET "localhost:9200/_template/template_test?pretty"
5、获取所有模板
curl -X GET "localhost:9200/_template?pretty"
6、获取通配符模板
curl -X GET "localhost:9200/_template/temp*?pretty"
7、删除模板名为 template_test 的模板
curl -X DELETE "localhost:9200/_template/template_test?pretty"
8、模板优先级
有时候,一个模板可能绝大部分符合新建索引的需求,但是局部需要微调,此时,如果复制旧的模板,微调之后,成为一个新的索引模板即可达到我们的需求,但是这操作略显重复。此时,可以采用模板叠加与覆盖来操作,如同 CSS 样式层叠表一般。模板的优先级是通过模板中的 order 字段定义的,数字越大,优先级越高。
通常情况下,索引的配置信息遵循以下的原则:
应用Elasticsearch默认的settings和mappings。
应用 order 数值低的索引模板中的设置。
应用 order 数值高的索引模板中的设置
应用索引创建时,用户指定的settings和mappings
9、索引模板的匹配
索引模板中的 index_patterns 字段定义的是该索引模板所应用的索引情况。如 "index_patterns" : ["test*"] 所表示的含义是,当新建索引时,所有以 test 开头的索引都会自动匹配到该索引模板,然后利用该模板进行相应的设置和字段添加等。
10、索引的 setting 部分
索引模板中的 setting 部分一般定义的是索引的主分片、拷贝分片、刷新时间、自定义分析器等。常见的 setting 部分结构如下:
"settings": {
"index": {
"analysis": {...}, // 自定义的分析器
"number_of_shards": "32", // 主分片的个数
"number_of_replicas": "1", // 主分片的拷贝分片个数
"refresh_interval": "5s" // 刷新时间
}
}
建立的索引,不会立马查到,这是为什么 Elasticsearch 为 near-real-time(接近实时)的原因,需要配置刷新时间,默认的是 1s。