📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

创建、获取、删除传统索引模板(Legacy Index Templates)。

API #

POST /_template/{name}
PUT /_template/{name}
GET /_template
GET /_template/{name}
DELETE /_template/{name}

API 的作用 #

传统索引模板允许您定义在创建新索引时自动应用的设置、映射和别名。

注意:传统模板(/_template)是旧版本 API。推荐使用可组合索引模板(/_index_template)和组件模板(/_component_template)。

传统模板 vs 可组合模板 #

特性传统模板可组合模板
API 路径/_template/_index_template
模块化是,可使用组件模板
优先级orderpriority
组合性不支持支持多个模板组合
推荐度已弃用推荐

API 的参数 #

创建/更新传统模板 #

路由参数 #

参数类型是否必填描述
{name}字符串必需模板名称

Query String 参数 #

参数类型是否必填默认值描述
cause字符串""创建模板的原因
create布尔值false是否只创建新模板(不允许覆盖)
include_type_name布尔值false是否在请求体中包含类型名称(已弃用)
master_timeout时间值30s连接到主节点的超时时间
order整数0模板的优先级顺序

请求体参数 #

参数类型是否必填描述
index_patterns数组必需索引模式列表(如 ["logs-*", "metrics-*"]
order整数模板优先级,数值越小优先级越高
version整数模板版本号
settings对象索引设置配置
mappings对象字段映射定义
aliases对象索引别名配置

获取传统模板 #

路由参数 #

参数类型是否必填描述
{name}字符串模板名称,支持逗号分隔的多个名称。不指定则获取所有模板

Query String 参数 #

参数类型是否必填默认值描述
flat_settings布尔值false是否以扁平格式返回设置
include_type_name布尔值false是否在响应中包含类型名称(已弃用)
local布尔值false是否只从本地节点获取信息
master_timeout时间值30s连接到主节点的超时时间

删除传统模板 #

路由参数 #

参数类型是否必填描述
{name}字符串必需要删除的模板名称

Query String 参数 #

参数类型是否必填默认值描述
master_timeout时间值30s连接到主节点的超时时间
timeout时间值默认超时操作超时时间

示例 #

创建传统模板 #

PUT /_template/logs_template
{
  "index_patterns": ["logs-*"],
  "order": 1,
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "@timestamp": { "type": "date" },
      "message": { "type": "text" },
      "level": { "type": "keyword" }
    }
  },
  "aliases": {
    "logs_all": {}
  }
}

响应示例:

{
  "acknowledged": true
}

只创建不更新 #

PUT /_template/logs_template?create=true
{
  "index_patterns": ["logs-*"],
  "settings": { ... }
}

设置优先级(order) #

PUT /_template/default_template
{
  "index_patterns": ["*"],
  "order": 0,
  "settings": {
    "number_of_replicas": 0
  }
}

PUT /_template/prod_template
{
  "index_patterns": ["prod-*"],
  "order": 10,
  "settings": {
    "number_of_replicas": 2
  }
}

获取所有模板 #

GET /_template

响应示例:

{
  "logs_template": {
    "index_patterns": ["logs-*"],
    "order": 1,
    "settings": { ... },
    "mappings": { ... },
    "aliases": { ... }
  }
}

获取特定模板 #

GET /_template/logs_template

获取多个模板 #

GET /_template/logs_template,metrics_template

以扁平格式获取 #

GET /_template/logs_template?flat_settings=true

删除模板 #

DELETE /_template/logs_template

响应示例:

{
  "acknowledged": true
}

使用 template 参数(向后兼容) #

PUT /_template/old_template
{
  "template": "logs-*",
  "settings": { ... }
}

注意template 参数已被 index_patterns 替代。

模板优先级(order) #

当多个模板匹配同一个索引时:

  1. order 值升序应用(数值越小优先级越高)
  2. 相同 order 时按模板名称字典序
  3. 后应用的模板设置会覆盖先应用的
order 值应用顺序
0最后应用
10优先应用
100最先应用

迁移到可组合模板 #

传统模板可以迁移到可组合模板:

# 传统模板
PUT /_template/logs
{
  "index_patterns": ["logs-*"],
  "settings": { ... },
  "mappings": { ... }
}

# 等效的可组合模板
# 1. 创建组件模板
PUT /_component_template/logs_settings
{
  "template": {
    "settings": { ... }
  }
}

# 2. 创建索引模板
PUT /_index_template/logs
{
  "index_patterns": ["logs-*"],
  "priority": 100,
  "template": {
    "mappings": { ... }
  }
}

使用场景 #

场景 1:时间序列索引 #

PUT /_template/daily_logs
{
  "index_patterns": ["logs-[YYYY.MM.DD]"],
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "index.format": "yyyy.MM.dd"
  }
}

场景 2:环境分离 #

# 开发环境
PUT /_template/dev_logs
{
  "index_patterns": ["logs-dev-*"],
  "order": 5,
  "settings": {
    "number_of_replicas": 0
  }
}

# 生产环境
PUT /_template/prod_logs
{
  "index_patterns": ["logs-prod-*"],
  "order": 10,
  "settings": {
    "number_of_replicas": 2
  }
}

注意事项 #

  1. 已弃用:传统模板 API 已被标记为弃用,推荐使用可组合模板
  2. 不可组合:不能像组件模板那样组合使用
  3. 版本控制:版本控制不如可组合模板灵活
  4. 全局限制:全局模板(* 模式)不能设置某些隐藏设置
  5. 迁移建议:新项目推荐使用可组合模板和组件模板