当前位置:   article > 正文

ElasticSearch篇——测试类测试restHighLevelClient常见API,一篇文章带你彻底吃透ES集成到Spring中如何使用,史上最全面、最详细使用方法分享!!!!!!_resthighlevelclient获取es大小

resthighlevelclient获取es大小

操作索引

创建索引

话不多说,直接开冲,大家准备好~

创建索引
测试用例

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. @Test
  6. void contextLoads() throws IOException {
  7. //1、创建索引请求
  8. CreateIndexRequest request = new CreateIndexRequest("es_index_test01");
  9. //2、客户端执行请求,请求后获得响应
  10. CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create (request, RequestOptions.DEFAULT);
  11. System.out.println(createIndexResponse);
  12. }

控制台:

查看ES的head可视化工具
刚刚创建的索引,创建成功!

获取索引(判断索引是否存在)

一般常用这个方法,判断某个索引是否存在,然后再进行相关的查询操作
方法

  1. @Autowired
  2. private RestHighLevelClient restHighLevelClient;
  3. @Test
  4. void testIndexExist() throws IOException {
  5. //创建获取索引的请求
  6. GetIndexRequest getIndexRequest = new GetIndexRequest("es_index_test01");
  7. //调用exists方法,判断这个索引是否存在
  8. boolean exists = restHighLevelClient.indices().exists(getIndexRequest,RequestOptions.DEFAULT);
  9. System.out.println(exists);
  10. }

控制台

删除索引

方法:

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. @Test
  6. void testDeleteIndex() throws IOException {
  7. //创建删除索引的请求
  8. DeleteIndexRequest deleteRequest = new DeleteIndexRequest("es_index_test01");
  9. //调用delete方法删除索引,返回的参数是一个AcknowledgedResponse类型,可以获取到删除是否成功的布尔值
  10. AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteRequest, RequestOptions.DEFAULT);
  11. //获取是否删除成功的结果
  12. System.out.println(delete.isAcknowledged());
  13. }
  14. }

控制台:
说明该索引删除成功

操作文档

添加文档(类似于数据库添加一行数据)

1、SpringBoot中添加文档的方法

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. /**
  6. * @Author xgh
  7. * @Description ES操作文档
  8. * @Date 2023/7/13 20:47
  9. * @Return
  10. **/
  11. @Test
  12. void testOpeDoc() throws IOException {
  13. //创建对象
  14. User user = new User("张三",12,"1999-12-13");
  15. //创建请求(参数中放之前创建好的索引)
  16. IndexRequest request = new IndexRequest("test01");
  17. //设置规则(之前在Kiabana中通过PUT命令设置的相关的规则)
  18. //设置文档id
  19. request.id("05");
  20. //设置请求的超时时间
  21. request.timeout("1S");
  22. //将数据放到请求中
  23. request.source(JSON.toJSONString(user), XContentType.JSON);
  24. //客户端发送请求获取响应的结果
  25. IndexResponse indexResponse = restHighLevelClient.index(request, RequestOptions.DEFAULT);
  26. //查看响应的结果
  27. System.out.println("响应的结果" + indexResponse.toString());
  28. System.out.println(indexResponse.status());//查看响应的状态,对应我们之前命令返回的result是create或者是update
  29. }

2、观察控制台和head可视化界面

Head可视化界面中的数据:
添加成功

获取文档

1、获取文档的方法

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. /**
  6. * @Author xgh
  7. * @Description 获取文档信息
  8. * @Date 2023/7/13 21:04
  9. * @Return
  10. **/
  11. @Test
  12. void testGetDoc() throws IOException {
  13. //创建Get请求,类似于命令中的GET/index/id
  14. GetRequest getRequest = new GetRequest("test01", "01");
  15. //调用GET方法,发起请求,返回响应的结果
  16. GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
  17. //GetResponse对象中可以有很多种的方法,获取响应结果的不同数据
  18. System.out.println(documentFields.getSourceAsString()); //打印文档的内容
  19. System.out.println(documentFields.getId()); //获取文档的Id
  20. System.out.println(documentFields.getIndex()); //获取该文档的索引
  21. System.out.println(documentFields); //获取返回的全部内容
  22. }

2、控制台

判断文档是否存在

1、方法

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. /**
  6. * @Author xgh
  7. * @Description 判断文档是否存在
  8. * @Date 2023/7/13 21:04
  9. * @Return
  10. **/
  11. @Test
  12. void testGetDoc() throws IOException {
  13. //创建Get请求,类似于命令中的GET/index/id
  14. GetRequest getRequest = new GetRequest("test01", "01");
  15. //不返回_source的上下文
  16. getRequest.fetchSourceContext(new FetchSourceContext(false));
  17. getRequest.storedFields("_none_");
  18. boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
  19. System.out.println(exists);
  20. }

2、控制台
文档存在就会返回一个true

更新文档

1、命令

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. /**
  6. * @Author xgh
  7. * @Description 更新文档
  8. * @Date 2023/7/13 21:50
  9. * @Return
  10. **/
  11. @Test
  12. void updateDoc() throws IOException {
  13. //创建更新请求
  14. UpdateRequest updateRequest = new UpdateRequest("test01", "01");
  15. //设置请求最大的超时时间
  16. updateRequest.timeout("1s");
  17. //创建要更新的对象(对象中的属性要和索引表中的字段一致)
  18. User user = new User("张翠山", 56, "1779-12-03");
  19. //将更新的对象封装到请求中
  20. updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
  21. //客户端来执行这个请求
  22. UpdateResponse updateResponse = restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);
  23. System.out.println(updateResponse.status()); //查看更新的状态,如果返回的状态是OK,那么就是更新成功
  24. }

2、控制台

3、查看可视化工具
更新成功!

删除文档

1、方法

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. /**
  6. * @Author xgh
  7. * @Description 删除文档
  8. * @Date 2023/7/13 22:33
  9. * @Return
  10. **/
  11. @Test
  12. void deleteDoc() throws IOException {
  13. //创建删除的请求
  14. DeleteRequest deleteRequest = new DeleteRequest("test01","02");
  15. //设置请求的超时时间
  16. deleteRequest.timeout("1s");
  17. //客户端发送删除的请求
  18. DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
  19. System.out.println(deleteResponse);
  20. }

2、控制台

3、可视化界面
02被删除了!

查询文档

1、方法

  1. @SpringBootTest
  2. class EsApiStudyApplicationTests {
  3. @Autowired
  4. private RestHighLevelClient restHighLevelClient;
  5. /**
  6. * @Author xgh
  7. * @Description 查询文档
  8. * @Date 2023/7/18 20:34
  9. * @Return
  10. **/
  11. @Test
  12. void searchDoc() throws IOException {
  13. //创建查询请求
  14. SearchRequest searchRequest = new SearchRequest("test01");
  15. //构建搜索条件(建造者模式,通过建造者模式,可以构造很多的条件)
  16. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  17. //通过QueryBuilders工具类来构建查询条件(现在是调用的精确匹配)
  18. //QueryBuilders.matchAllQuery() 匹配全部数据
  19. TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangzhang");
  20. //调用query方法,查询
  21. searchSourceBuilder.query(termQueryBuilder);
  22. //构建分页
  23. searchSourceBuilder.from(0);
  24. searchSourceBuilder.size(3);
  25. //设置查询超时时间(60秒)
  26. searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
  27. //封装搜索
  28. searchRequest.source(searchSourceBuilder);
  29. //客户端调用search查询
  30. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  31. //获取查询的数据
  32. SearchHits hits = searchResponse.getHits();
  33. System.out.println("精确查询的结果:"+JSON.toJSONString(hits));
  34. //将查询的结果以MAp的形式展示
  35. System.out.println("========================");
  36. for (SearchHit hit : searchResponse.getHits().getHits()) {
  37. System.out.println(hit.getSourceAsMap());
  38. }
  39. }

2、控制台

批量操作文档

1、方法

  1. /**
  2. * @Author xgh
  3. * @Description 批量操作文档
  4. * @Date 2023/7/18 20:13
  5. * @Return
  6. **/
  7. @Test
  8. void opeDocMore() throws IOException {
  9. //创建批量请求
  10. BulkRequest bulkRequest = new BulkRequest();
  11. //是指请求超时时间
  12. bulkRequest.timeout("10s");
  13. //创建测试数据,创建数组
  14. List<User> userList = new ArrayList<>();
  15. userList.add(new User("小明",24,"2026-07-05"));
  16. userList.add(new User("小黄",21,"2026-055-14"));
  17. userList.add(new User("小老板",33,"2026-02-26"));
  18. userList.add(new User("小千禧",45,"2026-03-12"));
  19. //批处理请求
  20. for (int i = 0; i < userList.size(); i++) {
  21. //这里调add方法,更或者删除的操作只是调用不同的方法
  22. bulkRequest.add(new IndexRequest("jd_goods")
  23. .id("" + (i+1))
  24. .source(JSON.toJSONString(userList.get(i)),XContentType.JSON));
  25. }
  26. //执行批量请求
  27. BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
  28. //查看是否执行成功(这里是成功返false,失败返回true)
  29. System.out.println("是否执行成功:" + bulkResponse.hasFailures());
  30. }

2、控制台        

3、可视化界面        

至此,关于ES集成到Spring中常见的操作方法已经介绍完毕,内容比较多,建议收藏反复学习。

后续还会持续更新,希望大家可以继续关注!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/68552
推荐阅读
相关标签
  

闽ICP备14008679号