elasticsearch,elastic-stack,Java,Http,elasticsearch,Elastic Stack" /> elasticsearch,elastic-stack,Java,Http,elasticsearch,Elastic Stack" />

ElasticSearch-RestHighLevelClient java.io.IOException:远程主机强制关闭了现有连接

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

Am使用单个查询从索引中获取
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代码创建)中,我复制了第一个索引中的所有字段,还添加了编码的文件内容。您能发布整个代码吗?