type
status
date
slug
summary
tags
category
icon
password

1、索引模板是什么

当需要为同一类索引应用相同的配置、映射、别名时,如果每次创建索引都逐一配置会有些麻烦。索引模板的出现正是为了简化这种操作,索引模板是预先定义好的在创建新索引时自动应用的模板,使用索引模板你可以方便地为某一类索引自动配置某些共同的参数
索引模板的使用注意事项:
  • 在创建索引(不管手动创建索引还是对文档建立索引)时,如果命中了索引模板的规则,都会使用索引模板创建索引。
  • 索引模板一般与索引别名一起使用。
  • 模板只在创建索引时应用,更改模板不会对现有索引产生影响。
另外在 Elasticsearch 7.8 版本之后推出 组合索引模板(composable index template)。在这之前的都属于旧的索引模板(legacy index template)。在使用优先级上,组合模板优先于旧模板。
组合索引模板的使用参考Index templates,旧的索引模板的使用参考Create or update index template (legacy)

2、旧索引模板(legacy index template)

旧索引模板基于 _template 路径,没有组件的概念,直接在索引模板里面定义 settings 和 mappings。这种方式适用于 7.8 之前的版本。
假如你想创建两个索引 service-log1 和 service-log2,这两个索引分别记录了不同年份的服务日志数据,它们的映射结构是相同的,也具有相同的分片数和别名。为了实现这一效果,你可以先创建一个索引模板 service-template1。
index_patterns 用于设置索引模板可以匹配的索引名,这里配置了所有以 service-log 开头的索引都会“命中”此模板。该模板还配置了索引的分片数、副本分片数、字段映射和别名。
在 7.8 版本后也可以直接用该方式创建索引,但是会有告警
在 Kibana 上也会明显提示你不要用这种方式创建索引。
notion image
这里我们不做过多介绍,直接介绍组合索引模板。

2、组合索引模板(composable index template)

组合模板索引基于 _index_template 路径,有两种使用方式:
  • 第一种是直接在索引模板里面定义 settings 和 mappings,类似于旧索引模板。
  • 第二种是使用模板组件的方式

2.1 使用索引模板

上面的旧索引模板的例子也可以改成下面的用法。
如果想查询索引模板的信息,可以使用以下代码。
有了索引模板,创建索引时,一旦索引名被索引模板匹配就会自动加载模板的配置到索引映射中。例如,创建一个索引 service-log1。
创建成功后,查看该索引的配置信息。
可以从上述代码运行结果中看到模板中的配置已经自动在 service-log1 中得到应用。如果你想在索引 service-log2 中自定义某些配置,可以在创建索引映射的时候指明,这样就能把模板的配置覆盖掉。
上述代码在索引service-log2中设置了分片数和每个主分片的副本分片数分别为3和2,添加了一个字段level,又把serviceid字段设置为long类型。
如果需要删除索引模板,可以使用以下代码。

2.2 使用模板组件

为了简化索引模板中的配置内容,你可以把常规的索引设置、映射等内容写成可复用的模板组件,然后在索引模板中引用这些组件,这样模板中的配置内容就会非常简洁,便于移植和管理。
例如首先创建两个索引组件模板:
然后创建一个索引模板 infotmp,把上述两个组件模板加载到索引模板中,索引模板会匹配所有名称以 loginfo 开头的索引。
可以创建一个索引 loginfo1 然后查看结果。
从以下返回结果可以看出索引loginfo1已经获得了两个组件模板中配置的映射、别名和分片数。
如果要删除索引模板infotmp以及组件模板comp1和comp2,可以使用以下代码。

2.3 组合索引模板的使用注意事项

  • 可组合模板优先于旧模板。如果和旧模板发生冲突,在创建的时候会出现以下提示,如果没有可组合模板匹配给定索引,则旧版模板可能仍匹配并被应用。
    • 如果使用显式设置创建索引并且该索引也与索引模板匹配,则创建索引请求中的设置将优先于索引模板及其组件模板中指定的设置。
    • 如果新数据流或索引与多个索引模板匹配,则使用优先级最高的索引模板。
    • 当多个组件模板中存在重复的配置内容时,后面的组件模板配置会覆盖前面的组件模板配置。如果一个组件模板正在被某个索引模板所引用,则这个组件模板不可以被删除。
    另外,Elasticsearch 具有内置索引模板,每个索引模板的优先级为100,适用于以下索引模式:
    • logs-*-*
    • metrics-*-*
    • synthetics-*-*
    所以在涉及内建索引模板时,要避免索引模式冲突。更多可以参考这里

    3、各版本的索引模板变化

    以上介绍的是 8.0 以后的版本,其中旧版本的索引模板创建方式会有所不同。

    3.1 6.0之前的版本

    3.2 6.0版本

    es的type只保留一种doc,所有索引模板的type都是doc,作为过渡。

    3.3 7.0版本

    取消了type,mapping字段里面不能再带有type
    Elasticsearch系列:文档(Document)Elasticsearch系列:索引管理
    mcbilla
    mcbilla
    一个普通的干饭人🍚
    Announcement
    type
    status
    date
    slug
    summary
    tags
    category
    icon
    password
    🎉欢迎来到飙戈的博客🎉
    -- 感谢您的支持 ---
    👏欢迎学习交流👏