SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)

简介: SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)

1.方式一

1.1 依赖

【不使用 spring-boot-starter-data-elasticsearch 就可以脱离 springboot 版本的限制,可以自行选择ES的版本】我用的是 springboot 2.2.5.RELEASE 版本,ES部署文件为 elasticsearch-6.4.3.tar.gz,这里只贴出主要依赖:

<!-- ElasticSearch Server -->
<dependency>
  <groupId>org.elasticsearch</groupId>
  <artifactId>elasticsearch</artifactId>
  <version>6.4.3</version>
</dependency>
<!-- Java High Level REST Client -->
<dependency>
  <groupId>org.elasticsearch.client</groupId>
  <artifactId>elasticsearch-rest-high-level-client</artifactId>
  <version>6.4.3</version>
</dependency>

1.2 配置信息

这里根据elasticsearch服务端的地址进行配置:

@Configuration
public class ElasticSearchConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")
                ));
        return client;
    }
}

1.3 客户端使用

@SpringBootTest
class EsApiApplicationTests {
  @Autowired
  @Qualifier(value = "restHighLevelClient")
  private RestHighLevelClient client;
  /*1.创建索引*/
  @Test
  void createIndex() throws IOException {
    // 创建请求
    CreateIndexRequest request = new CreateIndexRequest("yz_index");
    // 执行请求,获取响应
    CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
    System.out.println("creatIndex--" + response);
  }
  /*2.获取索引,判断是否存在*/
  @Test
  void getIndex() throws IOException {
    // 创建请求
    GetIndexRequest request = new GetIndexRequest("yz_index");
    // 执行请求,获取响应
    boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
    System.out.println("getIndex--exists--" + exists);
  }
  /*3.删除索引*/
  @Test
  void deleteIndex() throws IOException {
    // 创建请求
    DeleteIndexRequest request = new DeleteIndexRequest("yz_index");
    // 执行请求
    AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
    System.out.println("deleteIndex--" + response);
  }
  /*4.添加文档*/
  @Test
  void addDocument() throws IOException {
    // 创建对象
    User user = new User("Java虚拟机", 30);
    // 创建索引,即获取索引
    IndexRequest indexRequest = new IndexRequest("yz_index");
    // 添加规则 /index/_doc/id
    indexRequest.id("1");
    indexRequest.timeout(TimeValue.timeValueSeconds(1));
    // 存入对象
    indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
    // 发送请求
    IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
    System.out.println("addDocument--" + response);
  }
  /*5.获取文档是否存在*/
  @Test
  void getDocument() throws IOException {
    // 创建get请求
    GetRequest getRequest = new GetRequest("yz_index", "1");
    // 不获取返回的_source的上下文
    getRequest.fetchSourceContext(new FetchSourceContext(false));
    getRequest.storedFields("_none_");
    // 发送请求
    boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
    System.out.println("addDocument--" + exists);
    /*6.获取文档信息*/
    if (exists) {
      // 创建请求
      GetRequest getRequest1 = new GetRequest("yz_index", "1");
      // 发送请求
      GetResponse response = client.get(getRequest1, RequestOptions.DEFAULT);
      System.out.println("source--" + response.getSource());
      System.out.println("getDocument--" + response.getSourceAsString());
    }
    /*7.更新文档信息*/
    if (exists) {
      // 创建请求
      UpdateRequest updateRequest = new UpdateRequest("yz_index", "1");
      updateRequest.timeout("1s");
      // 修改内容
      User user = new User("小米", 10);
      updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
      UpdateResponse response = client.update(updateRequest, RequestOptions.DEFAULT);
      System.out.println("updateDocument--" + response.status());
    }
    /*8.删除文档信息*/
    if (exists) {
      // 创建请求
      DeleteRequest deleteRequest = new DeleteRequest("yz_index", "1");
      deleteRequest.timeout("1s");
      // 修改内容
      DeleteResponse response = client.delete(deleteRequest, RequestOptions.DEFAULT);
      System.out.println("deleteDocument--" + response.status());
    }
  }
  /*9.批量添加文档*/
  @Test
  void batchAddDocument() throws IOException {
    // 批量请求
    BulkRequest bulkRequest = new BulkRequest();
    bulkRequest.timeout("10s");
    // 创建对象
    ArrayList<User> userArrayList = new ArrayList<>();
    userArrayList.add(new User("小米1", 1));
    userArrayList.add(new User("小米2", 2));
    userArrayList.add(new User("小米3", 3));
    userArrayList.add(new User("小米4", 4));
    userArrayList.add(new User("小米5", 5));
    // 添加请求
    for (int i = 0; i < userArrayList.size(); i++) {
      bulkRequest.add(new IndexRequest("yz_index")
          .id("" + (i + 2))
          .source(JSON.toJSONString(userArrayList.get(i)), XContentType.JSON));
    }
    // 执行请求
    BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
    System.out.println("batchAddDocument--" + response.status());
  }
  /*10.查询*/
  @Test
  void search() throws IOException {
    // 创建请求
    SearchRequest searchRequest = new SearchRequest("jd_index");
    // 构建搜索条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "杜伽");// 精确查询
    searchSourceBuilder.query(termQueryBuilder);
    searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
    searchRequest.source(searchSourceBuilder);
    // 执行请求
    SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
    // 解析查询结果
    System.out.println("search--getHists--" + JSON.toJSONString(response.getHits()));
    for (SearchHit documentFields : response.getHits()) {
      System.out.println("search--getHist--" + documentFields.getSourceAsMap());
    }
  }
}

2.方式二

2.1 依赖

我用的是 springboot 2.5.4【所以spring-boot-starter-data-elasticsearch 的版本也是 2.5.4】此时对应的 elasticsearch 服务端和客户端的版本是 7.12.1 那要部署的ES版本也要是 7.12.1:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.2 配置信息

spring:
  elasticsearch:
    rest:
      uris: localhost:9200

2.3 客户端使用

@SpringBootTest
class EsStarterApplicationTests {
    @Autowired
    private RestHighLevelClient restHighLevelClient;
    @Test
    void contextLoads() {
    // 由于不同版本的API不同【没有参考价值】,这里不再贴出测试代码。
    }
}

3.注意事项

不同的 elasticsearch 版本有不同的 API 这就给升级造成了阻碍,为了避免这种情况,我们可以使用elasticsearch的 HTTP 客户端 Jest,下篇文章会详细说明。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
11月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
694 4
|
12月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
454 4
|
12月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1933 5
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
676 0
探索Spring Boot的@Conditional注解的上下文配置
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
2502 64
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
6816 0
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
759 5
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
1623 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】