首页/数据/NoSQL 速查/索引模板与组件模板
Elasticsearch89 条

索引模板与组件模板

索引模板按名称模式把 settings、mappings、aliases 自动应用到新建索引;组合式模板(composable)支持组件模板复用,并按 priority 决定冲突时谁生效。

NoSQL 速查数据更新于 2026-10-13

模板解决什么问题

索引模板按名称模式在索引创建的那一刻自动套用 settings、mappings 与 aliases,省掉每次建索引重复写配置。组合式(composable)模板还支持拆出组件模板复用公共配置,是 Elasticsearch 7.8 之后推荐的做法,旧的 legacy 模板在 8.0 已被移除。

基本信息

适用版本Elasticsearch 7.8+ / 8.x(composable)
接口PUT /_index_template/<name>
匹配规则index_patterns 支持通配符,priority 用于断冲突
组成template 下写 settings / mappings / aliases
复用composed_of 引用组件模板 PUT /_component_template/<name>

典型使用场景

  • 按天滚动的日志索引:logs-* 统一分片数、副本数与 @timestamp 映射
  • 统一字段规范:全站 message 用同一分词器,避免各索引行为不一致
  • 多套环境复用:把公共 settings 抽成组件模板,业务模板只写差异部分
  • 读写分离:模板里自动挂读别名,轮转时只切别名不动应用
  • 覆盖通用规则:为特定前缀的索引准备更高 priority 的专用模板

示例

示例
PUT /_component_template/base_settings        # 组件模板:公共配置,单独存在不生效
{
  "template": {
    "settings": { "number_of_shards": 3, "number_of_replicas": 1 }
  }
}

PUT /_index_template/logs_template
{
  "index_patterns": ["logs-*"],
  "priority": 500,
  "composed_of": ["base_settings"],          # 引用组件模板
  "template": {
    "settings": { "refresh_interval": "30s" },
    "mappings": {
      "properties": {
        "@timestamp": { "type": "date" },
        "message": { "type": "text" }
      }
    },
    "aliases": { "logs": {} }
  }
}

GET /_index_template/logs_template            # 核对真正生效的模板内容

模板要素读法

要素作用注意点
index_patterns哪些索引名会被套用通配范围别开太宽,避免误套到别的业务索引
priority多个模板同时匹配时决定取舍不显式拉开优先级,容易出现预期外的配置组合
composed_of引用组件模板复用配置组件模板自身不作用于索引,必须被引用
template.settings分片、副本、刷新等静态设置只在创建索引那一刻生效
template.mappings字段类型定义类型写错会被之后创建的所有索引继承
template.aliases自动挂别名配合读写别名可实现轮转零停机
模板只在创建索引时生效:已存在的索引不会被补写配置,改了模板要让它产生作用,得滚动到新索引(rollover)或用 _reindex 重建。
排查「配置为什么不生效」的顺序:GET /_index_template/<name> 看模板内容,GET /<index>/_settings?include_defaults=true 看索引实际值,再确认创建时间在模板更新之后。
删除或重命名被 composed_of 引用的组件模板后,匹配该模板的新索引会创建失败;调整组件模板前先确认还有哪些索引模板在引用它。

易错点

  • legacy 模板(/_template)与组合式模板混用容易互相干扰,8.0 已移除前者 → 新集群统一用 _index_template
  • 模板里 mapping 类型写错,之后创建的所有索引自动继承错误定义 → 先 GET /_index_template 核对
  • 多个模板都能匹配却没有拉开 priority,实际生效的配置和预期不同
  • 改完模板指望老索引跟着变,实际模板只管创建时刻 → 需要 rollover 或 _reindex
  • 把组件模板当成能独立生效的模板,只创建组件模板就以为新索引会带上配置

数据来源与参考

  • Elasticsearch Guide: Index templates
  • Elasticsearch Guide: Composable templates
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌