You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform的phillbaker/elasticsearch Provider设置索引总字段限制?

问题

使用phillbaker/elasticsearch Terraform Provider在AWS OpenSearch(Elasticsearch 7.10)集群创建索引时,某大索引字段数超过默认1000个字段的限制,创建失败。尝试将total_fields.limit放入mapping中导致解析失败,且Provider文档中未找到对应配置参数。

现有Terraform代码

resource "elasticsearch_index" "large_index" {
  name               = "large-index"
  number_of_shards   = 1
  number_of_replicas = 2
  mappings           = file("${path.root}/elastic-search-mappings/large-index.json")
  analysis_analyzer  = jsonencode({
    email_analyzer = {
      tokenizer = "uax_url_email"
    }
  })
}

错误信息

放入mapping时的解析错误

Error: elastic: Error 400 (Bad Request): Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [total_fields : {limit=2000}] [type=mapper_parsing_exception]

原始字段数超限错误

Error: elastic: Error 400 (Bad Request): Limit of total fields [1000] has been exceeded [type=illegal_argument_exception]

解决方案

total_fields.limit是索引级别的配置项,不属于mapping范畴,需通过elasticsearch_index资源的settings字段来设置。phillbaker/elasticsearch Provider支持该参数,可直接传入索引自定义配置。

修改后的代码如下:

resource "elasticsearch_index" "large_index" {
  name               = "large-index"
  number_of_shards   = 1
  number_of_replicas = 2
  mappings           = file("${path.root}/elastic-search-mappings/large-index.json")
  analysis_analyzer  = jsonencode({
    email_analyzer = {
      tokenizer = "uax_url_email"
    }
  })
  # 添加索引设置,调整字段数量限制
  settings = jsonencode({
    index = {
      mapping = {
        total_fields = {
          limit = 2000
        }
      }
    }
  })
}

说明:

  • 按照Elasticsearch/OpenSearch官方规范,total_fields.limit需配置在index.mapping节点下
  • 使用jsonencode将配置对象转为合法JSON格式,确保Terraform能正确解析并传递给集群

内容的提问来源于stack exchange,提问作者Jesse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:21:34