如何在Elasticsearch 8.6新版Java客户端中增大响应最大值
解决Elasticsearch 8.6 Java客户端增大响应大小的问题
在Elasticsearch 8.x的新Java客户端中,你可以通过**重载的search方法传入自定义RequestOptions**来设置最大响应大小,具体步骤如下:
- 定义最大响应大小常量(根据需求调整,比如设置为120MiB以覆盖你的100MiB+需求):
private static final int MAX_HTTP_RESPONSE_SIZE = 120 * 1024 * 1024; // 120MB
- 复用你已有的代码构建自定义
RequestOptions:
var customOptionsBuilder = RequestOptions.DEFAULT.toBuilder(); customOptionsBuilder.setHttpAsyncResponseConsumerFactory( new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(MAX_HTTP_RESPONSE_SIZE) ); RequestOptions customOptions = customOptionsBuilder.build();
- 在调用
search方法时,将自定义RequestOptions作为第三个参数传入:
SearchResponse<MyClass> response = connector.getClient().search( s -> s .index(connector.getIndexName()) .query(q -> q .match(t -> t .field("whatever") .query(query) ) ) .size(1000), MyClass.class, customOptions // 传入自定义的响应大小配置 );
补充说明
如果需要给所有请求统一设置最大响应大小,也可以在创建客户端实例时全局配置:
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http")); builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setHttpAsyncResponseConsumerFactory( new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(MAX_HTTP_RESPONSE_SIZE) ) ); ElasticsearchClient client = new ElasticsearchClient(new RestClientTransport(builder.build(), new JacksonJsonpMapper()));
这种方式会让所有请求共享该响应大小限制,适合全局统一配置的场景。
内容的提问来源于stack exchange,提问作者Lightsong
相关产品推荐
相关产品推荐

