首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Elasticsearch(ES)模板(Templates)

Elasticsearch(ES)模板(Templates)

作者头像
运维小路
发布2025-09-30 15:30:16
发布2025-09-30 15:30:16
1310
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ

Hadoop HDFS

Elasticsearch ES (本章节)

我们在前面介绍索引时候,直接向不存在的索引写入数据,会自动创建索引,这个创建的索引可能并不能满足需求,而且分片又无法调整。比如我们有的索引需要3分片2副本,有的索引需要5分片1副本。这个时候我们就可以通过定义不同的模板(Templates)来满足我们的需求。

Elasticsearch 模板(Template)是一种用于预先定义索引设置、映射(Mapping)和别名等配置的机制,能帮助用户在创建新索引时自动应用一致的规则,避免重复配置,同时确保索引结构的标准化。

1. 索引模板(Index Templates)

适用版本:Elasticsearch 7.x 及更早版本(8.x 中仍可使用,但推荐使用组件模板)。

组成:由 index_patterns(匹配索引名称的模式)、settings(索引设置)、mappings(字段映射)、aliases(别名)等组成。

代码语言:javascript
复制
curl -X PUT "localhost:9200/_index_template/logs_template" -H 'Content-Type: application/json' -d'
{
  "index_patterns": ["logs-*"], 
  "priority": 200,               # 
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 2,
      "index.lifecycle.name": "logs_policy"  # 关联ILM策略
    },
    "mappings": {
      "properties": {
        "@timestamp": { "type": "date" },
        "message": { "type": "text" },
        "host": { "type": "keyword" }
      }
    },
    "aliases": {
      "all_logs": {}  # 为匹配索引添加别名
    }
  },
  "_meta": {
    "description": "Template for log indices"
  }
}
'

logs_template:模板的名字。

index_patterns:匹配所有以 logs- 开头的索引。

priority:优先级,数值越大优先级越高。

number_of_shards:命中以后的分区数量。

number_of_replicas:命中以后的副本数量。

index.lifecycle.name:生命周期策略(ILM)。

mappings:定义一些全局Mapping(手动创建索引时显式指定的 mappings > 模板中定义的 mappings > Elasticsearch 自动推断的动态映射)。

aliases:别名,搜索的时候可以代替所有模板创建的索引。

一句话总结就是所有以logs-*的索引默认是3分片,2副本,而不会是默认的1分片1副本。

在一般的情况下下ES的很多索引都会按照时间进行轮转,而我们创建不同的模板,就可以满足相同类型的索引都以固定分片和副本来创建。

2.组件模板(Component Templates)

适用版本:Elasticsearch 7.8+ 及更高版本(8.x 推荐使用)。

特点:可复用的配置片段,需通过索引模板引用组合使用,避免重复定义。

定义一个组件模板(通用分片设置)。

代码语言:javascript
复制
{
  "component_template": {
    "name": "shard-settings",
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1
    }
  }
}

定义一个索引模板,引用组件模板。

代码语言:javascript
复制
{
  "index_template": {
    "name": "logs-template",
    "index_patterns": ["logs-*"],
    "composed_of": ["shard-settings"],  // 引用组件模板
    "mappings": {
      "properties": { "timestamp": { "type": "date" } }
    }
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 索引模板(Index Templates)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档