Elasticsearch 7.17.3设置http_max_content_length后仍报ContentTooLongException
以下是针对你的问题的排查方向和解决方案:
确认ES服务端配置是否正确生效
Elasticsearch的HTTP内容长度限制参数为http.max_content_length(点分隔),若你之前设置的是下划线分隔的http_max_content_length,配置不会生效。
验证配置:执行GET _cluster/settings?include_defaults=true,查看http.max_content_length是否为200mb。若未生效,需修正参数名并滚动重启7.17.3集群的所有节点(7.17.3版本需重启节点才能加载HTTP相关配置,8.9.0部分支持动态生效)。调整Spring Data Elasticsearch客户端的内容长度限制
Spring Data Elasticsearch 4.4.x底层依赖的Apache HttpClient自身存在内容长度限制,仅放开ES服务端限制不足以解决问题,需自定义客户端配置:@Bean public RestHighLevelClient elasticsearchClient() { RestClientBuilder builder = RestClient.builder(new HttpHost("your-es-host", 9200, "http")); builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultRequestConfig(RequestConfig.custom() .setMaxContentLength(200 * 1024 * 1024) // 200MB,与服务端配置一致 .build()) ); return new RestHighLevelClient(builder); }排查实际请求的内容大小
确认请求实际大小是否在200MB以内:可通过日志打印请求字节数,或用curl模拟请求验证。7.17.3与8.9.0对请求内容的计算逻辑可能存在差异(如压缩处理、请求头计入方式),若请求接近200MB,可尝试将http.max_content_length临时调至300MB测试。检查代理/网关的额外限制
若7.17.3集群前端有反向代理(如Nginx)或API网关,需同步调整这些组件的请求体大小限制(比如Nginx的client_max_body_size参数),避免代理层截断请求。
内容的提问来源于stack exchange,提问作者Shubham Palkar

