如何通过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
相关产品推荐
相关产品推荐

