索引模板是什么
索引模板为匹配特定模式的索引预设分片数、映射与生命周期策略:新索引创建时自动套用。日志类「每天一个索引」的场景几乎都靠它统一配置,否则每建一个索引都要重复设置分片、字段类型与保留策略,稍有遗漏就会出现类型冲突或存储失控。
基本信息
| 推荐形式 | 组合模板 _index_template(7.8+) |
|---|---|
| 匹配方式 | index_patterns 通配 |
| 优先级 | priority 数值大者生效 |
| 可设置内容 | settings、mappings、aliases |
| 生效范围 | 只影响新建索引 |
| 配套能力 | index.lifecycle.name 引用 ILM 策略 |
典型使用场景
- 为 logs-* 的每日索引统一设置分片数与副本数
- 预设字段类型(时间字段为 date、service 为 keyword)避免动态映射乱猜
- 在模板里引用 ILM 策略,让新索引自动进入生命周期管理
- 为不同业务线建立各自的模板,隔离分片与保留策略
- 版本升级时用模板为新索引引入新字段
- 排查字段类型冲突时确认是哪个模板在生效
组合模板(7.8+ 推荐)
组合模板(7.8+ 推荐)
PUT _index_template/logs-template
{
"index_patterns": ["logs-*"],
"priority": 100,
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "logs-policy" # 引用 ILM 策略
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"service": { "type": "keyword" }
}
}
}
}字段说明
| 字段 | 作用 | 注意 |
|---|---|---|
| index_patterns | 匹配索引名 | 支持通配符 |
| priority | 优先级 | 数值大的模板优先 |
| template.settings | 索引设置 | 分片、副本、ILM |
| template.mappings | 字段映射 | 显式定义关键字段 |
| composed_of | 组件模板 | 组合模板可拆分复用 |
模板按 index_patterns 匹配加 priority 决胜;旧式 _template 仍可用但推荐组合模板,后者支持组件模板与更清晰的优先级语义。
模板只影响新建索引,已有索引不会追溯变更;索引名要预留模式位(如按天、按周),否则模板匹配可能失灵。
多个模板优先级冲突时不易察觉,用查询模板接口核对生效配置,比凭印象判断可靠。
字段映射一旦确定就不能随意改类型(如 text 改成 keyword 需要重建索引),关键字段应在模板里预先定义好。