避免在 Java 中的 Elasticsearch 重新索引时超时

问题描述

当记录数较多时,以下代码在客户端(Elasticsearch 客户端)中返回超时。

CompletableFuture<BulkByScrollResponse> future = new CompletableFuture<>();
client.reindexAsync(request,RequestOptions.DEFAULT,new ActionListener<BulkByScrollResponse>() {
@Override
public void onResponse(BulkByScrollResponse bulkByScrollResponse) {
    future.complete(bulkByScrollResponse);
}

@Override
public void onFailure(Exception e) {
    future.completeExceptionally(e);
}
});
BulkByScrollResponse response = future.get(10,TimeUnit.MINUTES); // client timeout occured before this timeout

以下是客户端配置。

connectTimeout: 60000
socketTimeout: 600000
maxRetryTimeoutMillis: 600000

有没有办法无限期地等待重新索引完成?

解决方法

我认为无限期地等待完成重新索引过程并为超时设置非常高的值并不是更好的选择,因为这不是一个正确的解决方法,而且弊大于利。

相反,您应该检查响应,添加更多调试日志以查找根本原因并解决它们。另请查看 my tips to improve re-indexing speed,它应该可以解决您的一些潜在问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...