Elasticsearch与SpringBoot整合 High-level-client-rest
一. 加入依赖
需要对应ES版本
<!--ElasticSearch 依赖-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.9.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.9.1</version>
</dependency>
<!--阿里 fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
二.配置 application.yml
es:
host: 127.0.0.1
port: 9200
protocol: http
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Configuration
public class EsEnvironmentProperties{
@Value("${es.host}")
private String host; // ES请求地址
@Value("${es.port}")
private int port; //端口
@Value("${es.protocol}")
private String protocol; //协议
// 可配置多ES
@Bean(name = "restHighLevelClientPre")
public RestHighLevelClient getRestHighLevelClientPre() {
return new RestHighLevelClient(RestClient
.builder(new HttpHost(host, port, protocol)));
}
}
三. 封装ES操作
@Component
public class ESUtils {
private static RestHighLevelClient restHighLevelClient;
private static volatile ESUtils eSUtils;
private ESUtils(){}
public static ESUtils getInstance(RestHighLevelClient restclient) {
restHighLevelClient = restclient;
if (eSUtils == null) {
synchronized (ESUtils.class) {
if (eSUtils == null) {
eSUtils = new ESUtils();
}
}
}
return eSUtils;
}
/**
* 查询
* @param index 索引
* @param searchSourceBuilder
*/
public SearchResponse searchBySearchSourceBuilde(String index,
SearchSourceBuilder searchSourceBuilder) throws IOException {
// 组装SearchRequest请求
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.source(searchSourceBuilder);
// 同步获取SearchResponse结果
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
return searchResponse;
}
/**
* 批量插入 批量修改删除原理相同,也可混合 只需在 bulkRequest.add 不同请求即可
* @param jsonStrList 待插入集合 注:每个String元素需为json字符串
* @param index 索引
* @return
*/
public BulkResponse bulkInsert(List<String> jsonStrList,String index) {
BulkRequest bulkRequest = new BulkRequest();
for (String jsonStr : jsonStrList) {
IndexRequest indexRequest = new IndexRequest(index);
indexRequest.source(jsonStr, XContentType.JSON);
bulkRequest.add(indexRequest); // 加入到批量请求bulk
}
BulkResponse bulkResponse = null;
try {
bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
return bulkResponse;
}
}
具体使用
@Resource(name = "restHighLevelClientPre")
RestHighLevelClient restHighLevelClient;
//查询
public void search() {
// user_city 完全匹配 Beijing 且 (2020-6-1 <= user_time <= 2020-6-2)
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("user_city", "Beijing"))
.must(QueryBuilders.rangeQuery("user_time").gte("2020-6-1 00:00:00"))
.must(QueryBuilders.rangeQuery("user_time").lte("2020-6-2 00:00:00"));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
// 按 user_time 升序排序
searchSourceBuilder.sort("user_time", SortOrder.ASC);
// 设置返回数量
searchSourceBuilder.size(1000);
SearchResponse searchResponse = null;
try {
searchResponse = ESUtils.getInstance(restHighLevelClient)
.searchBySearchSourceBuilde("users", searchSourceBuilder);
} catch (IOException e) {
e.printStackTrace();
}
SearchHit[] hitsArr = searchResponse.getHits().getHits();
List<User> userList = new ArrayList<>();
for (SearchHit searchHit : hitsArr) {
User user = new User();
JSONObject source = JSONObject.parseObject(searchHit.getSourceAsString());
user.setUser_id(source.getString("user_id"));
user.setUser_name(source.getString("user_name"));
userList.add(user);
}
}
//批量插入
public void bulkInsert(List<User> userList) {
List<String> jsonList = new ArrayList<>();
for (User user : userList) {
// User 转为 Json字符串
jsonList.add(JSONObject.toJSONString(user));
}
BulkResponse bulkResponse = ESUtils.getInstance(restHighLevelClient).bulkInsert(jsonList, "users");
}
Elasticsearch与SpringBoot整合 High-level-client-rest相关推荐
- ElasticSearch系列 - SpringBoot整合ES:分析器
文章目录 01. ElasticSearch 分析器 1. ElasticSearch match 文本搜索的过程? 2. ElasticSearch 分析器是什么? 3. ElasticSearch ...
- ElasticSearch系列 - SpringBoot整合ES:短语匹配查询 match_phrase
文章目录 1. ElasticSearch match_phrase查询是什么?它与match查询有什么区别? 2. ElasticSearch match_phrase 查询的语法是什么? 3. E ...
- ElasticSearch系列 - SpringBoot整合ES:多个精确值查询 terms
文章目录 01. ElasticSearch terms 查询支持的数据类型 02. ElasticSearch term和 terms 查询的区别 03. ElasticSearch terms 查 ...
- ElasticSearch系列 - SpringBoot整合ES:实现分页搜索 from+size、search after、scroll
文章目录 01. 数据准备 02. ElasticSearch 如何查询所有文档? 03. ElasticSearch 如何指定搜索结果的条数? 04. ElasticSearch 分页查询方式有哪些 ...
- 2019.12.24笔记——SpringBoot整合Elasticsearch及其使用
目录 Elasticsearch与springboot整合的方式 原生客户端 REST Jest Spring Data Spring Data的配置 Spring Data的使用 插入或修改数据 删 ...
- SpringBoot整合最新Elasticsearch Java API Client 7.16教程
文章目录 前言 一.Elasticsearch和Kibana 7.16版本安装 二.pom.xml文件引入依赖 三.代码实例 总结 前言 最新在学习SpringBoot整合es的一些知识,浏览了网上的 ...
- Springboot 整合ElasticSearch(Client篇)
目录 1.简介 2.依赖.pom.xml 3.配置类ESConfig 4.yml配置文件 5.实体类,省略不写了,根据自己的业务定义实体类 6.Client的使用 7.有问题留言,谢谢 1.简介 相信 ...
- 七、SpringBoot整合elasticsearch集群
@Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...
- Springboot整合Elasticsearch(High-level-Client)
前言 通过学习Elasticsearch一小段时间来稍微认识了一点ES的体系架构.发现ES最大的坑就是版本兼容性问题了-在整合Springboot也不例外,但是,有一种方式能较好的解决-通过restc ...
最新文章
- mysql性能的介绍少_MySQL性能突然下降怎么回事 MySQL性能突然下降原因介绍
- 解决MySQL导入数据时遇到secure-file-priv的问题
- 你的网站添加X-UA-Compatible meta标签了吗?
- 高等数学:第十一章 无穷级数(3)正弦级数、余弦级数、周期为2L的周期函数的傅里叶级数
- iOS9 白名单问题 -canOpenURL: failed for URL: xx - error:This app is not allowed to query for scheme x...
- 在看世界杯的闲暇看看电视剧《长恨歌》
- [小技巧][Java]Arrays.fill() 初始化 二维数组
- 漫步数理统计四——概率集合函数(下)
- 想Get热搜同款?GitHub开源神器让父亲重返18岁!
- TEDxChengdu 演讲(瞬雨)
- 新手开发记录:把ListView、Adapter的逻辑捋顺,做一个微博热搜吧
- php函数copy和rename的区别
- win10找回windows照片查看器的方法
- 使用jQuery Easyui 制作的后台界面
- matlab仓库选址,物流中心选址matlab
- [SSL_CHX][2021-8-18]取余
- 关于字符集的测试报告(转)
- Tkinter——②entry(文本框)和text(多行文本)
- 深入理解JVM:晚期(运行期)优化
- 王兴的“下半场”与美团-大众点评的另一种可能