一. 加入依赖

需要对应ES版本

 
  1. <!--ElasticSearch 依赖-->

  2. <dependency>

  3. <groupId>org.elasticsearch.client</groupId>

  4. <artifactId>elasticsearch-rest-high-level-client</artifactId>

  5. <version>7.9.1</version>

  6. </dependency>

  7. <dependency>

  8. <groupId>org.elasticsearch</groupId>

  9. <artifactId>elasticsearch</artifactId>

  10. <version>7.9.1</version>

  11. </dependency>

  12. <!--阿里 fastjson-->

  13. <dependency>

  14. <groupId>com.alibaba</groupId>

  15. <artifactId>fastjson</artifactId>

  16. <version>1.2.58</version>

  17. </dependency>

  18. <!--lombok-->

  19. <dependency>

  20. <groupId>org.projectlombok</groupId>

  21. <artifactId>lombok</artifactId>

  22. </dependency>

二.配置 application.yml

 
  1. es:

  2. host: 127.0.0.1

  3. port: 9200

  4. protocol: http

 
  1. @Getter

  2. @Setter

  3. @AllArgsConstructor

  4. @NoArgsConstructor

  5. @Configuration

  6. public class EsEnvironmentProperties{

  7. @Value("${es.host}")

  8. private String host; // ES请求地址

  9. @Value("${es.port}")

  10. private int port; //端口

  11. @Value("${es.protocol}")

  12. private String protocol; //协议

  13. // 可配置多ES

  14. @Bean(name = "restHighLevelClientPre")

  15. public RestHighLevelClient getRestHighLevelClientPre() {

  16. return new RestHighLevelClient(RestClient

  17. .builder(new HttpHost(host, port, protocol)));

  18. }

  19. }

三. 封装ES操作

 
  1. @Component

  2. public class ESUtils {

  3. private static RestHighLevelClient restHighLevelClient;

  4. private static volatile ESUtils eSUtils;

  5. private ESUtils(){}

  6. public static ESUtils getInstance(RestHighLevelClient restclient) {

  7. restHighLevelClient = restclient;

  8. if (eSUtils == null) {

  9. synchronized (ESUtils.class) {

  10. if (eSUtils == null) {

  11. eSUtils = new ESUtils();

  12. }

  13. }

  14. }

  15. return eSUtils;

  16. }

  17. /**

  18. * 查询

  19. * @param index 索引

  20. * @param searchSourceBuilder

  21. */

  22. public SearchResponse searchBySearchSourceBuilde(String index,

  23. SearchSourceBuilder searchSourceBuilder) throws IOException {

  24. // 组装SearchRequest请求

  25. SearchRequest searchRequest = new SearchRequest(index);

  26. searchRequest.source(searchSourceBuilder);

  27. // 同步获取SearchResponse结果

  28. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

  29. return searchResponse;

  30. }

  31. /**

  32. * 批量插入 批量修改删除原理相同,也可混合 只需在 bulkRequest.add 不同请求即可

  33. * @param jsonStrList 待插入集合 注:每个String元素需为json字符串

  34. * @param index 索引

  35. * @return

  36. */

  37. public BulkResponse bulkInsert(List<String> jsonStrList,String index) {

  38. BulkRequest bulkRequest = new BulkRequest();

  39. for (String jsonStr : jsonStrList) {

  40. IndexRequest indexRequest = new IndexRequest(index);

  41. indexRequest.source(jsonStr, XContentType.JSON);

  42. bulkRequest.add(indexRequest); // 加入到批量请求bulk

  43. }

  44. BulkResponse bulkResponse = null;

  45. try {

  46. bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);

  47. } catch (IOException e) {

  48. e.printStackTrace();

  49. }

  50. return bulkResponse;

  51. }

  52. }

具体使用

 
  1. @Resource(name = "restHighLevelClientPre")

  2. RestHighLevelClient restHighLevelClient;

  3. //查询

  4. public void search() {

  5. // user_city 完全匹配 Beijing 且 (2020-6-1 <= user_time <= 2020-6-2)

  6. QueryBuilder queryBuilder = QueryBuilders.boolQuery()

  7. .must(QueryBuilders.termQuery("user_city", "Beijing"))

  8. .must(QueryBuilders.rangeQuery("user_time").gte("2020-6-1 00:00:00"))

  9. .must(QueryBuilders.rangeQuery("user_time").lte("2020-6-2 00:00:00"));

  10. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

  11. searchSourceBuilder.query(queryBuilder);

  12. // 按 user_time 升序排序

  13. searchSourceBuilder.sort("user_time", SortOrder.ASC);

  14. // 设置返回数量

  15. searchSourceBuilder.size(1000);

  16. SearchResponse searchResponse = null;

  17. try {

  18. searchResponse = ESUtils.getInstance(restHighLevelClient)

  19. .searchBySearchSourceBuilde("users", searchSourceBuilder);

  20. } catch (IOException e) {

  21. e.printStackTrace();

  22. }

  23. SearchHit[] hitsArr = searchResponse.getHits().getHits();

  24. List<User> userList = new ArrayList<>();

  25. for (SearchHit searchHit : hitsArr) {

  26. User user = new User();

  27. JSONObject source = JSONObject.parseObject(searchHit.getSourceAsString());

  28. user.setUser_id(source.getString("user_id"));

  29. user.setUser_name(source.getString("user_name"));

  30. userList.add(user);

  31. }

  32. }

  33. //批量插入

  34. public void bulkInsert(List<User> userList) {

  35. List<String> jsonList = new ArrayList<>();

  36. for (User user : userList) {

  37. // User 转为 Json字符串

  38. jsonList.add(JSONObject.toJSONString(user));

  39. }

  40. BulkResponse bulkResponse = ESUtils.getInstance(restHighLevelClient).bulkInsert(jsonList, "users");

  41. }

Elasticsearch与SpringBoot整合 High-level-client-rest相关推荐

  1. ElasticSearch系列 - SpringBoot整合ES:分析器

    文章目录 01. ElasticSearch 分析器 1. ElasticSearch match 文本搜索的过程? 2. ElasticSearch 分析器是什么? 3. ElasticSearch ...

  2. ElasticSearch系列 - SpringBoot整合ES:短语匹配查询 match_phrase

    文章目录 1. ElasticSearch match_phrase查询是什么?它与match查询有什么区别? 2. ElasticSearch match_phrase 查询的语法是什么? 3. E ...

  3. ElasticSearch系列 - SpringBoot整合ES:多个精确值查询 terms

    文章目录 01. ElasticSearch terms 查询支持的数据类型 02. ElasticSearch term和 terms 查询的区别 03. ElasticSearch terms 查 ...

  4. ElasticSearch系列 - SpringBoot整合ES:实现分页搜索 from+size、search after、scroll

    文章目录 01. 数据准备 02. ElasticSearch 如何查询所有文档? 03. ElasticSearch 如何指定搜索结果的条数? 04. ElasticSearch 分页查询方式有哪些 ...

  5. 2019.12.24笔记——SpringBoot整合Elasticsearch及其使用

    目录 Elasticsearch与springboot整合的方式 原生客户端 REST Jest Spring Data Spring Data的配置 Spring Data的使用 插入或修改数据 删 ...

  6. SpringBoot整合最新Elasticsearch Java API Client 7.16教程

    文章目录 前言 一.Elasticsearch和Kibana 7.16版本安装 二.pom.xml文件引入依赖 三.代码实例 总结 前言 最新在学习SpringBoot整合es的一些知识,浏览了网上的 ...

  7. Springboot 整合ElasticSearch(Client篇)

    目录 1.简介 2.依赖.pom.xml 3.配置类ESConfig 4.yml配置文件 5.实体类,省略不写了,根据自己的业务定义实体类 6.Client的使用 7.有问题留言,谢谢 1.简介 相信 ...

  8. 七、SpringBoot整合elasticsearch集群

    @Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  9. Springboot整合Elasticsearch(High-level-Client)

    前言 通过学习Elasticsearch一小段时间来稍微认识了一点ES的体系架构.发现ES最大的坑就是版本兼容性问题了-在整合Springboot也不例外,但是,有一种方式能较好的解决-通过restc ...

最新文章

  1. mysql性能的介绍少_MySQL性能突然下降怎么回事 MySQL性能突然下降原因介绍
  2. 解决MySQL导入数据时遇到secure-file-priv的问题
  3. 你的网站添加X-UA-Compatible meta标签了吗?
  4. 高等数学:第十一章 无穷级数(3)正弦级数、余弦级数、周期为2L的周期函数的傅里叶级数
  5. iOS9 白名单问题 -canOpenURL: failed for URL: xx - error:This app is not allowed to query for scheme x...
  6. 在看世界杯的闲暇看看电视剧《长恨歌》
  7. [小技巧][Java]Arrays.fill() 初始化 二维数组
  8. 漫步数理统计四——概率集合函数(下)
  9. 想Get热搜同款?GitHub开源神器让父亲重返18岁!
  10. TEDxChengdu 演讲(瞬雨)
  11. 新手开发记录:把ListView、Adapter的逻辑捋顺,做一个微博热搜吧
  12. php函数copy和rename的区别
  13. win10找回windows照片查看器的方法
  14. 使用jQuery Easyui 制作的后台界面
  15. matlab仓库选址,物流中心选址matlab
  16. [SSL_CHX][2021-8-18]取余
  17. 关于字符集的测试报告(转)
  18. Tkinter——②entry(文本框)和text(多行文本)
  19. 深入理解JVM:晚期(运行期)优化
  20. 王兴的“下半场”与美团-大众点评的另一种可能

热门文章

  1. 吴恩达《机器学习》第十二章:支持向量机SVM
  2. 面试题——C++/C
  3. 网易身患绝症员工被裁事件背后 年轻一代的辛酸和压力
  4. 正点原子操作过程中芯片总是出错
  5. 聚类算法—K-means python实现
  6. Neural Style Transfer 神经风格迁移详解
  7. [Postman使用]请求与响应
  8. python qt gui快速编程 pdf_翻译:《用python和Qt进行GUI编程》——介绍
  9. python模拟登录获取Cookie
  10. 在CentOS上安装Docker