You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Spring Data Elasticsearch 8.4仓库并替换已弃用的RestHighLevelClient

解决方案

在Spring Boot 2.7.3(对应Spring Data Elasticsearch 4.4.x)中,要基于新的ElasticsearchClient创建ElasticsearchOperations,只需注册ElasticsearchRestTemplate的Bean即可——它是ElasticsearchOperations接口的新实现,专门适配Elasticsearch 8.x的客户端,替代了旧版基于RestHighLevelClient的ElasticsearchTemplate。

步骤1:确保已正确配置ElasticsearchClient

如果还没完成基础客户端配置,参考以下代码:

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticsearchClientConfig {

    @Bean
    public ElasticsearchClient elasticsearchClient() {
        // 初始化底层RestClient
        RestClient restClient = RestClient.builder(
                new HttpHost("localhost", 9200, "http")
        ).build();

        // 配置传输层,绑定Jackson作为JSON处理器
        RestClientTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper()
        );

        return new ElasticsearchClient(transport);
    }
}

步骤2:注册ElasticsearchOperations Bean

创建配置类,注入已有的ElasticsearchClient,实例化ElasticsearchRestTemplate(它实现了ElasticsearchOperations):

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchRestTemplate;
import co.elastic.clients.elasticsearch.ElasticsearchClient;

@Configuration
public class ElasticsearchOperationsConfig {

    // 命名为elasticsearchTemplate,匹配@EnableElasticsearchRepositories默认依赖的Bean名称
    @Bean(name = "elasticsearchTemplate")
    public ElasticsearchOperations elasticsearchOperations(ElasticsearchClient elasticsearchClient) {
        return new ElasticsearchRestTemplate(elasticsearchClient);
    }
}

步骤3:保持Repository不变

你原来的ItemRepository无需修改,因为@EnableElasticsearchRepositories会自动检测并使用容器中的ElasticsearchOperations实现(即我们注册的ElasticsearchRestTemplate):

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface ItemRepository extends ElasticsearchRepository<Item, String> {
    // 自定义查询方法保持不变
}

关键说明

  • ElasticsearchRestTemplate是Spring Data Elasticsearch 4.x引入的新实现,完全适配Elasticsearch 8.x的ElasticsearchClient,替代了弃用的ElasticsearchTemplate。
  • 只要容器中存在ElasticsearchOperations类型的Bean,@EnableElasticsearchRepositories就会自动使用它;如果Bean名称不是elasticsearchTemplate,可以通过@EnableElasticsearchRepositories(elasticsearchTemplateRef = "你的Bean名称")指定。
  • 确保依赖版本匹配:Spring Boot 2.7.3会自动管理spring-data-elasticsearch为4.4.x版本,与Elasticsearch 8.4.x兼容。

内容的提问来源于stack exchange,提问作者Jérémy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:35:33