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。

标签: none

添加新评论