在elasticsearch中更新文档需要很长时间

问题描述

我使用 elasticsearch 7.9 版,并且我在每个月滚动的索引中索引文档。 我的问题是 elasticsearch 中的并发更新请求需要很长时间。例如,如果更新对象的总时间为 6000 毫秒,则在 elasticsearch 中更新文档需要 5500 毫秒,这对我们来说不是很好。 这是我如何配置与 elasticsearch 的连接:

HttpHost[] hosts = new HttpHost[addresses.length];
                for (int i = 0,size = addresses.length; i < size; i++) {
                    hosts[i] = new HttpHost(addresses[i],port,"https");
                }
                Path trustStorePath = Paths.get(CERTIFICATE_FILEPATH));
                KeyStore truststore = KeyStore.getInstance("pkcs12");
                try (InputStream is = Files.newInputStream(trustStorePath)) {
                    truststore.load(is,PASSWORD);
                }
                SSLContextBuilder sslBuilder = SSLContexts.custom()
                        .loadTrustMaterial(truststore,null);
                final SSLContext sslContext = sslBuilder.build();
                SSLIOSessionStrategy sslConnectionSocketFactory = new SSLIOSessionStrategy(sslContext,NoopHostnameVerifier.INSTANCE);
                final CredentialsProvider credentialsProvider =
                        new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(USERNAME,PASSWORD));
                IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
                        .setIoThreadCount(Runtime.getRuntime().availableProcessors())
                        .setConnectTimeout(6000)
                        .setSoTimeout(6000)
                        .build();
                ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
                PoolingNHttpClientConnectionManager poolingConnManager = new PoolingNHttpClientConnectionManager(ioReactor,RegistryBuilder.
                        <SchemeIOSessionStrategy>create()
                        .register("http",NoopIOSessionStrategy.INSTANCE)
                        .register("https",sslConnectionSocketFactory)
                        .build()
                );
                poolingConnManager.setMaxTotal(THREAD_POOL_SIZE);
                restClient = new RestHighLevelClient(RestClient.builder(hosts)
                        .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setSSLContext(sslContext)
                                .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                                .setDefaultCredentialsProvider(credentialsProvider)
                                .setConnectionManager(poolingConnManager)
                        )
                        .setRequestConfigCallback(requestConfigBuilder ->
                                requestConfigBuilder
                                        .setConnectTimeout(6000)
                                        .setConnectionRequestTimeout(6000)
                                        .setSocketTimeout(6000)
                        )
                );

这是我在项目中的更新请求

UpdateRequest request = new UpdateRequest(
                indexName,id)
                .doc(doc,XContentType.JSON)
                .setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL)
                .retryOnConflict(5);
        
            UpdateResponse response = dataRestClient.update(request,RequestOptions.DEFAULT);
            

连接配置是否有问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)