es相关的官方客户端与spring客户端对比与介绍

1. 客户端版本种类

  1. es提供的

    1. TransportClient
      1. 传统的客户端,基于TCP传输协议与Elasticsearch通信。
      2. 已经被弃用,不推荐使用。
        1. 适用于Elasticsearch 5.x及以前的版本
        2. 因为Elasticsearch 6.x及以上版本已不再支持TCP Transport协议,TransportClient无法连接Elasticsearch集群。
    2. RestHighLevelClient
      1. 是一个高级的REST客户端,主要用于与Elasticsearch集群通信。
      2. 基于Java Low Level REST Client构建,提供更高级的API,隐藏底层细节。
      3. 主要用于Kibana和Logstash等工具。
      4. RestHighLevelClient适用于Elasticsearch 6.2.0及以上版本。
  2. spring提供的

    1. ES存储库操作:简单的CRUD
      1. 特点
        1. 当你需要进行简单的CRUD操作(创建、读取、更新、删除文档)时,使用ES存储库操作是一个不错的选择。
        2. 这是因为Spring Data Elasticsearch会自动生成存储库接口的实现,从而使你的代码更简洁、易于理解。
    2. ElasticsearchTemplate
      1. 基于ElasticsearchRestTemplate封装,提供更高级的API,如各种CRUD操作。
      2. 也需要依赖Spring Framework。
    3. ElasticsearchRestTemplate
      1. 是一个Spring的RestTemplate的扩展,用于与Elasticsearch RESTful API交互。
      2. 基于Spring的RestTemplate,提供Elasticsearch的自动化JSON序列化和反序列化。
      3. 需要依赖Spring Framework。
    4. ElasticsearchOperations:接口实现
    5. 使用选择
      1. 如果需要更多spring集成相关的功能,则使用ElasticsearchTemplate。
      2. 如果需要直接访问Elasticsearch RESTful接口,则使用ElasticsearchRestTemplate。
      3. 性能和功能上,ElasticsearchTemplate略胜一筹。

2. spring的相关操作客户端

2.1 ES存储库操作:简单的CRUD

  1. 特点

    1. 当你需要进行简单的CRUD操作(创建、读取、更新、删除文档)时,使用ES存储库操作是一个不错的选择。
    2. 这是因为Spring Data Elasticsearch会自动生成存储库接口的实现,从而使你的代码更简洁、易于理解。
  2. 核心

    • 简单的crud操作
    • 不支持复杂的查询检索
  3. 使用步骤

    1. 实体类

      @Document(indexName = "encrypt_log", type = "encrypt_log")
      public class EncryptLogEntity {
        
          //对应字段
          private String srcIp;
          private String dstIp;
          //...
          
          // getters and setters
      }
      
      
    2. 创建ElasticsearchRepository接口

      public interface EncryptLogRepository extends ElasticsearchRepository<EncryptLogEntity, String> {
          
      }
      
    3. 对应的服务中注入接口,并编写方法

      @Autowired
      private MyDocumentRepository myDocumentRepository;
      
      // 创建文档
      myDocumentRepository.save(document);
      
      // 读取文档
      MyDocument document = myDocumentRepository.findById(id).orElse(null);
      
      // 更新文档
      myDocumentRepository.save(updatedDocument);
      
      // 删除文档
      myDocumentRepository.deleteById(id);
      

2.2 ElasticsearchTemplate:复杂的操作:增删改查

  1. 特点

    1. 当你需要执行更复杂的查询、聚合操作,或者需要使用一些特定的Elasticsearch功能时,使用ElasticsearchTemplate可能是一个更好的选择。
    2. 基于 Transport Client与ES交互。
  2. 核心

    • 更复杂的查询、聚合操作 -> ElasticsearchTemplate
    • 需要更简单、方便地集成ES时,可以使用ElasticsearchTemplate。
  3. 使用

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
    
    // 构建查询
    QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "example");
    
    // 执行查询
    SearchHits<MyDocument> searchHits = elasticsearchTemplate.search(new NativeSearchQueryBuilder()
            .withQuery(queryBuilder)
            .build(), MyDocument.class);
    
    
  4. 简单查询例子

    @Autowired
    private ElasticsearchTemplate esTemplate;
    
    List<Map<String, Object>> documents = ...
    esTemplate.bulkIndex(documents);
    

2.3 ElasticsearchRestTemplate:跨节点的搜索查询

  1. 特点

    • 适用于更复杂的查询操作
  2. 情景

    • 需要更高级ES功能时,使用ElasticsearchRestTemplate。
    • 需要更高级ES功能时,使用ElasticsearchRestTemplate。
  3. 样例

    @Autowired
    private ElasticsearchRestTemplate esRestTemplate;
    
    List<Map<String, Object>> documents = ...
    esRestTemplate.bulkIndex(documents, Map.class);  
    
    SearchQuery searchQuery = new NativeSearchQueryBuilder()
         .withQuery(matchQuery("name", "spring"))
         .build();
    List<Map> results = esRestTemplate.search(searchQuery, Map.class)
         .getContent();
    

2.4 ElasticsearchTemplate和ElasticsearchRestTemplate主要的区别在于

  1. 底层实现:

    • ElasticsearchTemplate 底层使用 Elasticsearch Java API 实现。
    • ElasticsearchRestTemplate 底层使用 Elasticsearch Rest API 实现。
  2. 使用范围:

    • ElasticsearchTemplate 只能在内部使用,不支持跨节点操作。
    • ElasticsearchRestTemplate 支持跨节点操作。
  3. 功能:

    • ElasticsearchTemplate 功能更全面,支持多种操作,如索引、搜索、删除等。
    • ElasticsearchRestTemplate 主要用于搜索。
  4. 性能:

    • ElasticsearchTemplate 性能更高,不需要经过 HTTP 请求。
    • ElasticsearchRestTemplate 需要通过 HTTP 请求,性能相对较低。
  5. 复杂度:

    • ElasticsearchTemplate 复杂度较高,需要深入理解 Elasticsearch Java API。
    • ElasticsearchRestTemplate 复杂度较低,只需要理解 Elasticsearch 的 REST API。
  6. 总的来说:

    • 如果只在单个节点上操作 Elasticsearch,优先选择 ElasticsearchTemplate。
    • 如果需要跨节点操作,或者为了简单起见,可以选择 ElasticsearchRestTemplate。

2.4 ElasticsearchOperations:接口

  1. 特点

    • ElasticsearchOperations是一个接口,代表了基础的Elasticsearch操作。
    • ElasticsearchTemplate是ElasticsearchOperations的一个实现。
  2. 功能

    1. ElasticsearchOperations定义了基本的Elasticsearch操作,如插入、查询、删除等。
    2. ElasticsearchTemplate实现了ElasticsearchOperations接口,提供了更多功能,例如:
      • 批量操作
      • 分页查询
      • 对复杂对象进行转换
      • 映射管理
      • 索引管理
  3. 使用

    1. 一般情况下,程序直接使用ElasticsearchTemplate。

    2. 在测试中,可以使用ElasticsearchOperations接口,达到分离依赖的目的。

3. 不同版本的依赖及对应方法的选择

  1. 进入spring对应的官网

  2. 随便找一个api——找到历史文档及版本对应版本对应

    99ce2f103035d2745477e933ed77870.png

  3. 然后找到对应的官方操作客户端方法

    d265d736da3e258e9e2181641a40542.png

4. 总结

  1. es客户端
    1. TransportClient :已过时
    2. RestHighLevelClient:es官方推荐的版本,但有时候在spring中被废弃
  2. spring客户端
    1. ES存储库
      • 适用于简单的CRUD操作
      • 可阅读性强,操作编写难度麻烦
    2. ElasticsearchTemplate
      • 复杂的增删改查操作
      • 单节点中使用
    3. ElasticsearchRestTemplate
      • 多节点,和相对于ElasticsearchTemplate 更便捷的方法调用
      • 更加多样的查询封装方法
    4. ElasticsearchOperations
      • 是一个接口,使用的较少
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中创建Elasticsearch客户端对象有多种方式,以下是几种常见的配置方式: 1. 使用官方提供的 Elasticsearch Rest Client: - 添加Elasticsearch Rest Client依赖到`pom.xml`文件中: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>${elasticsearch.version}</version> </dependency> ``` - 创建一个`RestHighLevelClient`的Bean,可以在`application.properties`或`application.yml`文件中配置Elasticsearch的节点地址: ```java @Configuration public class ElasticsearchConfig { @Value("${elasticsearch.host}") private String host; @Value("${elasticsearch.port}") private int port; @Bean public RestHighLevelClient elasticsearchClient() { RestClientBuilder builder = RestClient.builder(new HttpHost(host, port, "http")); return new RestHighLevelClient(builder); } } ``` - 在需要使用Elasticsearch客户端的地方注入`RestHighLevelClient`对象即可使用。 2. 使用Spring Data Elasticsearch: - 添加Spring Data Elasticsearch依赖到`pom.xml`文件中: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` - 在`application.properties`或`application.yml`文件中配置Elasticsearch的节点地址: ```properties spring.data.elasticsearch.cluster-nodes=localhost:9200,localhost:9201 ``` - 在需要使用Elasticsearch Repository的地方定义接口并使用`@Repository`注解,Spring Boot会自动创建相应的Repository bean,并自动配置Elasticsearch客户端。 以上是两种常见的配置方式,您可以根据自己的需求选择适合的方式进行配置和使用Elasticsearch客户端。 希望能够帮助到您!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值