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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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,下篇文章会详细说明。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
22天前
|
存储 人工智能 自然语言处理
Elasticsearch Inference API增加对阿里云AI的支持
本文将介绍如何在 Elasticsearch 中设置和使用阿里云的文本生成、重排序、稀疏向量和稠密向量服务,提升搜索相关性。
65 14
Elasticsearch Inference API增加对阿里云AI的支持
|
1月前
|
IDE API 开发工具
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
Alibaba Cloud API Toolkit for VSCode 是集成了 OpenAPI 开发者门户多项功能的 VSCode 插件,开发者可以通过这个插件方便地查找API文档、进行API调试、插入SDK代码,并配置基础环境设置。我们的目标是缩短开发者在门户和IDE之间的频繁切换,实现API信息和开发流程的无缝结合,让开发者的工作变得更加高效和紧密。
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
|
16天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
17 1
|
1月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
90 9
|
1月前
|
存储 数据可视化 JavaScript
可视化集成API接口请求+变量绑定+源码输出
可视化集成API接口请求+变量绑定+源码输出
44 4
|
1月前
|
运维 监控 数据可视化
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
62 1
|
1月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
120 0
|
1月前
|
计算机视觉 异构计算
目标检测实战(四):YOLOV4-Tiny 源码训练、测试、验证详细步骤
这篇文章详细介绍了使用YOLOv4-Tiny进行目标检测的实战步骤,包括下载源码和权重文件、配置编译环境、进行简单测试、训练VOC数据集、生成训练文件、准备训练、开始训练以及多GPU训练的步骤。文章还提供了相应的代码示例,帮助读者理解和实践YOLOv4-Tiny模型的训练和测试过程。
113 0
|
API Java Spring
kafka-Java-SpringBoot-listener API开发
listener开发过程是独立的,你也可以不开发,使用@KafkaListener注解来监听kafka的消息,我的方式是实现一个唯一方法的接口,然后在该方法里面进行消费,无需关心kafka的具体实现,只需要添加一个topics到配置值文件即可.
3973 0
|
4天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。

热门文章

最新文章