如何通过docker-compose配置调高ElasticSearch字段总数上限
调整Elasticsearch总字段数上限的配置方法
你遇到的Limit of total fields [1000] has been exceeded报错是Elasticsearch索引映射的默认保护机制,默认单个索引最多允许1000个字段,防止大量动态字段拖垮集群性能。可以通过修改docker-compose配置调整全局默认阈值,方法如下:
修改docker-compose配置(全局生效,对新建索引有效)
在elasticsearch服务的environment配置块中新增字段上限的环境变量即可,不需要手动修改容器内的配置文件。例如将总字段上限调整为2000(可根据业务实际需求调整数值,不建议设置过高),修改后的完整配置参考:
elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.16.3 container_name: ${PROJECT_NAME}_elasticsearch volumes: - elastic:/var/lib/elastic/data environment: - "discovery.type=single-node" - "ES_JAVA_OPTS=-Xms1g -Xmx1g" - xpack.security.enabled=false - ELASTIC_PASSWORD=pass # 新增以下配置,调整所有新建索引的总字段数上限 - "INDICES_MAPPING_TOTAL_FIELDS_LIMIT=2000" ulimits: memlock: soft: -1 hard: -1 ports: - "${ELASTICSEARCH_PORT}:9200" kibana: image: docker.elastic.co/kibana/kibana:7.16.0 container_name: ${PROJECT_NAME}_kibana ports: - "${KIBANA_PORT}:5601"
配置修改完成后,在docker-compose.yml所在目录执行以下命令重启服务即可:
docker-compose up -d elasticsearch
注意:上述全局配置仅对重启后新创建的索引生效,已经存在的索引不会自动继承该配置。
针对已存在的索引单独调整
如果需要给已经创建完成的索引调高字段上限,直接调用Elasticsearch的API修改即可,无需重启服务。替换命令中的索引名和端口后执行:
curl -XPUT "http://127.0.0.1:${ELASTICSEARCH_PORT}/替换成你的实际索引名/_settings" -H "Content-Type: application/json" -d' { "index.mapping.total_fields.limit": 2000 }'
提示:字段数上限设置过高会导致索引内存占用上升、读写性能下降,优先建议梳理业务字段映射,减少不必要的动态字段自动生成,确有宽表需求时再调高阈值。
内容的提问来源于stack exchange,提问作者Klick
相关产品推荐
相关产品推荐

