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

模拟索引模板匹配,验证特定索引名称会应用哪些模板配置。

API #

POST /_index_template/{name}/_simulate
POST /_template/{name}/_simulate
POST /_template/_simulate

API 的作用 #

该 API 用于模拟索引模板的匹配和应用,帮助您:

  • 测试特定索引名称会匹配到哪些模板
  • 查看模板应用后的最终配置
  • 发现可能存在的模板冲突
  • 验证新模板配置而无需实际创建索引

两种模拟方式的区别 #

API用途name 参数含义
POST /_index_template/{name}/_simulate测试索引名称匹配{name} 是索引名称
POST /_template/{name}/_simulate模拟模板配置{name} 是模板名称

API 的参数 #

模拟索引名称匹配 #

路由参数 #

参数类型是否必填描述
{name}字符串必需要测试的索引名称

Query String 参数 #

参数类型是否必填默认值描述
master_timeout时间值30s等待主节点响应的超时时间

请求体参数(可选) #

参数类型是否必填描述
index_template对象临时模板配置,用于测试
create布尔值false
cause字符串api

模拟模板配置 #

路由参数 #

参数类型是否必填描述
{name}字符串模板名称,与请求体二选一

Query String 参数 #

参数类型是否必填默认值描述
master_timeout时间值30s等待主节点响应的超时时间

请求体参数(可选,但需指定 name 或请求体) #

参数类型是否必填描述
index_template对象是*模板配置对象
create布尔值false
cause字符串api

*如果不指定 {name},则必须在请求体中提供 index_template

示例 #

模拟索引名称匹配 #

POST /_index_template/logs-2024-01-01/_simulate

响应示例:

{
  "template": {
    "settings": {
      "index": {
        "number_of_shards": "3",
        "number_of_replicas": "1"
      }
    },
    "mappings": { ... },
    "aliases": { ... }
  },
  "overlapping": [
    {
      "name": "logs_template",
      "index_patterns": ["logs-*"]
    }
  ]
}

使用临时模板配置测试 #

POST /_index_template/test-index/_simulate
{
  "index_template": {
    "index_patterns": ["test-*"],
    "priority": 100,
    "template": {
      "settings": {
        "number_of_shards": 5
      }
    }
  }
}

模拟现有模板 #

POST /_template/logs_template/_simulate

模拟新模板配置 #

POST /_template/_simulate
{
  "index_template": {
    "index_patterns": ["logs-*"],
    "priority": 100,
    "template": {
      "settings": {
        "number_of_shards": 3
      },
      "mappings": {
        "properties": {
          "@timestamp": { "type": "date" }
        }
      }
    }
  }
}

测试多个组件模板的组合 #

# 先创建组件模板
PUT /_component_template/common_settings
{
  "template": {
    "settings": {
      "refresh_interval": "5s"
    }
  }
}

# 模拟索引模板使用组件模板
POST /_index_template/test-index/_simulate
{
  "index_template": {
    "index_patterns": ["test-*"],
    "composed_of": ["common_settings"],
    "template": {
      "settings": {
        "number_of_shards": 3
      }
    }
  }
}

响应字段说明 #

字段类型描述
template对象应用后的最终模板配置
template.settings对象合并后的索引设置
template.mappings对象合并后的映射定义
template.aliases对象合并后的别名配置
overlapping数组与模拟模板产生重叠的其他模板列表

overlapping 字段 #

字段描述
name重叠的模板名称
index_patterns该模板的索引模式

使用场景 #

场景 1:验证模板匹配 #

在创建索引前验证模板会正确应用:

POST /_index_template/my_app-prod/_simulate

场景 2:测试新模板配置 #

在部署新模板前测试其效果:

POST /_index_template/test-logs/_simulate
{
  "index_template": {
    "index_patterns": ["logs-*"],
    "priority": 100,
    "template": {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 2
      }
    }
  }
}

场景 3:发现模板冲突 #

检查可能产生冲突的模板:

POST /_index_template/app-logs/_simulate

查看 overlapping 字段了解冲突情况。

场景 4:验证组件模板组合 #

POST /_index_template/test-index/_simulate
{
  "index_template": {
    "index_patterns": ["test-*"],
    "composed_of": ["settings_template", "mappings_template"],
    "template": {
      "aliases": {
        "test_alias": {}
      }
    }
  }
}

场景 5:比较不同优先级 #

# 测试低优先级模板
POST /_index_template/test/_simulate
{
  "index_template": {
    "index_patterns": ["*"],
    "priority": 50,
    "template": {
      "settings": {
        "number_of_replicas": 0
      }
    }
  }
}

# 测试高优先级模板
POST /_index_template/test/_simulate
{
  "index_template": {
    "index_patterns": ["test-*"],
    "priority": 100,
    "template": {
      "settings": {
        "number_of_replicas": 2
      }
    }
  }
}

模板优先级模拟 #

当多个模板匹配时,响应会显示最终合并的配置:

{
  "template": {
    "settings": {
      "number_of_shards": "3",      // 来自基础模板
      "number_of_replicas": "2",     // 被高优先级模板覆盖
      "refresh_interval": "5s"       // 来自组件模板
    }
  },
  "overlapping": [
    {
      "name": "base_template",
      "index_patterns": ["*"],
      "priority": 1
    },
    {
      "name": "specific_template",
      "index_patterns": ["test-*"],
      "priority": 100
    }
  ]
}

两个 API 的选择指南 #

需求使用 API
测试特定索引名称会匹配哪些模板POST /_index_template/{index_name}/_simulate
验证现有模板的配置POST /_template/{template_name}/_simulate
测试新模板配置而不创建POST /_template/_simulate + 请求体
检查模板冲突任一 API,查看 overlapping 字段

注意事项 #

  1. 不会创建索引:模拟操作不会创建实际索引
  2. 不会保存模板:请求体中的临时模板不会被保存
  3. 覆盖检测overlapping 字段帮助发现潜在的配置冲突
  4. 优先级验证:可以验证不同优先级模板的应用顺序
  5. 组件模板引用:引用的组件模板必须存在才能正确模拟