ElasticSearch-RestHighLevelClient java.io.IOException:远程主机强制关闭了现有连接
Am使用单个查询从索引中获取ElasticSearch-RestHighLevelClient java.io.IOException:远程主机强制关闭了现有连接,java,http,elasticsearch,elastic-stack,Java,Http,elasticsearch,Elastic Stack,Am使用单个查询从索引中获取100Kplus文档。为此,我使用ScrollSearchAPI。在那之后,我一个接一个地迭代每一个doucments,并在其中添加一个字段,并为此创建一个新索引 我使用RestHighLevelClient实现Java代码和ElasticSearch之间的连接。我已经为25小时设置了Timeout选项(setMaxRetryTimeoutMillis(90000000)) 但是,30分钟后我仍然收到以下异常 Exception in thread "main" ja
100K
plus文档。为此,我使用ScrollSearch
API。在那之后,我一个接一个地迭代每一个doucments,并在其中添加一个字段,并为此创建一个新索引
我使用RestHighLevelClient
实现Java代码和ElasticSearch之间的连接。我已经为25
小时设置了Timeout
选项(setMaxRetryTimeoutMillis(90000000))
但是,30分钟后我仍然收到以下异常
Exception in thread "main" java.io.IOException: An existing connection was forcibly closed by the remote host
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at org.apache.http.impl.nio.reactor.SessionInputBufferImpl.fill(SessionInputBufferImpl.java:204)
at org.apache.http.impl.nio.codecs.AbstractMessageParser.fillBuffer(AbstractMessageParser.java:136)
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:241)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588)
at java.lang.Thread.run(Unknown Source)
我的ElasticSearch服务器正在远程计算机上运行。一旦我得到这个异常,我的远程机器ES服务器也会自动关闭
请查找下面的代码,在这里我创建了RestHighLevelClient
的实例
private static RestClientBuilder builder = RestClient.builder(new HttpHost("My_Server.com", 9200, "http"),
new HttpHost("My_Server.com", 9201, "http"))
.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setConnectTimeout(90000000)//25hours
.setSocketTimeout(90000000);
}
})
.setMaxRetryTimeoutMillis(90000000);
private static RestHighLevelClient instance4 = new RestHighLevelClient(builder);
public static RestHighLevelClient getInstance3() {
return instance4;
}
这通常表示没有分配足够的堆。不管怎样,为什么要写入一个新索引,如果它位于同一个集群上,那么它所需的内存将增加一倍。如果您只想更新文档,为什么不使用更优化的update_by_查询API?@sramalingam24-Am通过使用
文件路径
并读取实际文件(位于本地驱动器中),从现有索引中获取文件路径
。我将文件编码为base64,并使用所有现有的索引字段+编码的文件内容创建一个新索引。那么,对于这个活动,我如何使用update\u by\u query
api?那么新字段就是编码的文件内容?你为什么要这么做?这意味着您正在存储文件twicenope.的内容。在我的第一个索引中,我只有文件路径。在我的第二个索引(通过java代码创建)中,我复制了第一个索引中的所有字段,还添加了编码的文件内容。您能发布整个代码吗?