使用 spring-data-elasticsearch 4.4 和 elasticsearch 7.16 的“ElasticsearchOperations”公式

`ElasticsearchOperations` formulation with spring-data-elasticsearch 4.4 and elasticsearch 7.16

elasticsearch 7.16之前,ElasticsearchOperations可以用RestHighLevelClient

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        try {
            RestClientBuilder restClientBuilder = RestClient.builder(httpHosts)
                  .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
                        .setDefaultCredentialsProvider(getElasticCredentialsProvider())
                        .setKeepAliveStrategy((response, context) -> 3 * 60 * 1000));
            return new ElasticsearchRestTemplate(restHighLevelClient);
        } catch (final Exception e) {
            throw new RuntimeException(e);
        }
    }

现在 RestHighLevelClient 已弃用,我找不到新的 class 来从提供的新 Java client 中获取弹性搜索操作。

发挥作用的依赖项是

    spring_elasticsearch = 'org.springframework.data:spring-data-elasticsearch:4.4.0-M2'

我目前正致力于将新的 Elasticsearch 客户端集成到 Spring Data Elasticsearch 中。我们将在下一个次要版本 (4.4) 中仍然是 RestHighLevelClient,但作为可选方案提供使用新客户端的可能性。

新客户端还不具备与 RHLC 相同的功能,并且仍然存在一些错误(您可能想看看 it's issue list),因此我们无法替换它,但最重要的在当前版本中不使用它的原因是新客户端引入 jakarta 包而不是 javax,默认情况下切换到新客户端会破坏许多现有应用程序。

在 Spring Data Elasticsearch 5.0 之前无法完成完全替换,它将使用 Spring 6,集成在 Spring Boot 3 中,因为 Jakarta EE9 将仅与这些版本一起使用.

在我看来,Elasticsearch 不应该在次要版本(ES 7.15 -> 7.16)的切换中弃用 RHLC,同时提供引入重大更改的不完整替代方案。

所以目前我们不得不接受这样一个事实,即 Spring Data Elasticsearch 需要使用已弃用的 class。