SpringBoot 整合es(elasticsearch)使用elasticsearch-rest-high-level-client实现增删改
引入依赖
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.elasticsearch</groupId>
- <artifactId>elasticsearch</artifactId>
- <version>7.8.0</version>
- </dependency>
- <!-- elasticsearch的客户端 -->
- <dependency>
- <groupId>org.elasticsearch.client</groupId>
- <artifactId>elasticsearch-rest-high-level-client</artifactId>
- <version>7.8.0</version>
- </dependency>
- <!-- elasticsearch依赖2.x的log4j -->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- <version>2.8.2</version>
- </dependency>
- <!-- 阿里JSON解析器 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.75</version>
- </dependency>
yml文件
- #elasticsearch
- esHostName: 192.168.1.25
- esPort: 9200
- ContentModel.java 根据自己的实际业务来
- import lombok.Data;
- import lombok.ToString;
- import lombok.experimental.Accessors;
- /**
- * es存放实体类
- */
- @Data
- @Accessors(chain = true)
- @ToString
- public class ContentModel {
- private static final long serialVersionUID = 6320548148250372657L;
- private Integer contentId;
- private String title;
- }
配置类
EsConfig.java
- import org.apache.http.HttpHost;
- import org.elasticsearch.client.RequestOptions;
- import org.elasticsearch.client.RestClient;
- import org.elasticsearch.client.RestClientBuilder;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- /**
- * @author yvioo。
- */
- @Configuration
- public class EsConfig {
- @Value("${esHostName}")
- private String esHostName;
- @Value("${esPort}")
- private Integer esPort;
- public static final RequestOptions COMMON_OPTIONS;
- static {
- RequestOptions.Builder builder=RequestOptions.DEFAULT.toBuilder();
- COMMON_OPTIONS=builder.build();
- }
- @Bean
- public RestHighLevelClient esRestClient(){
- RestClientBuilder builder = RestClient.builder(new HttpHost(esHostName, esPort, "http"));
- RestHighLevelClient client=new RestHighLevelClient(builder);
- return client;
- }
- }
常量
EsConstant.java 可以不用
- /**
- * @author yvioo。
- */
- public class EsConstant {
- public static final String CONTENT_INDEX="索引名称";
- public static final String CONTENT_TYPE="类型";
- }
工具类
EsService.java
- import com.alibaba.fastjson.JSON;
- import com.example.es.elasticsearch.entity.ContentModel;
- import lombok.extern.slf4j.Slf4j;
- import org.elasticsearch.action.bulk.BulkRequest;
- import org.elasticsearch.action.bulk.BulkResponse;
- import org.elasticsearch.action.delete.DeleteRequest;
- import org.elasticsearch.action.delete.DeleteResponse;
- import org.elasticsearch.action.get.GetRequest;
- import org.elasticsearch.action.index.IndexRequest;
- import org.elasticsearch.action.update.UpdateRequest;
- import org.elasticsearch.action.update.UpdateResponse;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.elasticsearch.common.xcontent.XContentType;
- import org.elasticsearch.rest.RestStatus;
- import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.io.IOException;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * es操作类
- *
- * @author 洪。
- */
- @Slf4j
- @Service
- public class EsService {
- @Resource
- private RestHighLevelClient restHighLevelClient;
- /**
- * 批量插入文档数据
- * @return 返回true 表示有错误
- */
- public boolean batchEsContent(List<ContentModel> contentModelList) throws IOException {
- BulkRequest bulkRequest = new BulkRequest();
- List<Integer> delIds=new LinkedList<>();
- for (ContentModel model : contentModelList) {
- IndexRequest indexRequest = new IndexRequest(EsConstant.CONTENT_INDEX).type(EsConstant.CONTENT_TYPE);
- indexRequest.id(model.getContentId().toString());
- String s = JSON.toJSONString(model);
- indexRequest.source(s, XContentType.JSON);
- bulkRequest.add(indexRequest);
- }
- BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, EsConfig.COMMON_OPTIONS);
- List<String> collect = Arrays.stream(bulk.getItems()).map(item -> {
- return item.getId();
- }).collect(Collectors.toList());
- log.error("内容索引生成:{}", collect);
- return bulk.hasFailures();
- }
- /**
- * 判断是否存在文档数据
- *
- * @param id 索引的ID
- * @return
- * @throws IOException
- */
- public boolean existIndex(Integer id) throws IOException {
- GetRequest getRequest = new GetRequest(
- EsConstant.CONTENT_INDEX,
- id.toString());
- getRequest.fetchSourceContext(new FetchSourceContext(false));
- getRequest.storedFields("_none_");
- return restHighLevelClient.exists(getRequest, EsConfig.COMMON_OPTIONS);
- }
- /**
- * 删除文档数据
- * @param id
- * @return
- * @throws IOException
- */
- public boolean deleteIndex(Integer id) throws IOException {
- DeleteRequest request = new DeleteRequest(
- EsConstant.CONTENT_INDEX,
- id.toString());
- DeleteResponse deleteResponse = restHighLevelClient.delete(
- request, EsConfig.COMMON_OPTIONS);
- if (deleteResponse.status().getStatus()== RestStatus.OK.getStatus()){
- return true;
- }
- return false;
- }
- /**
- * 批量删除索引
- * @param ids
- * @return 返回true 表示有错误
- * @throws IOException
- */
- public boolean deleteBatchIndex(List<Integer> ids) throws IOException {
- // 批量删除数据
- BulkRequest request = new BulkRequest();
- ids.forEach(s->{
- request.add(new DeleteRequest().index(EsConstant.CONTENT_INDEX).type(EsConstant.CONTENT_TYPE).id(s.toString()));
- });
- BulkResponse response = restHighLevelClient.bulk(request, EsConfig.COMMON_OPTIONS);
- return response.hasFailures();
- }
- /**
- * 更新文档数据
- * @param contentModel
- * @return
- * @throws IOException
- */
- public boolean updateIndex(ContentModel contentModel) throws IOException {
- // 修改数据
- UpdateRequest request = new UpdateRequest();
- request.index(EsConstant.CONTENT_INDEX).id(contentModel.getContentId().toString());
- String s = JSON.toJSONString(contentModel);
- request.doc(s, XContentType.JSON);
- UpdateResponse updateResponse = restHighLevelClient.update(request, EsConfig.COMMON_OPTIONS);
- if (updateResponse.status().getStatus()== RestStatus.OK.getStatus()){
- return true;
- }
- return false;
- }
- }
使用直接注入 EsService 然后调用里面的方法即可
由于每种业务查询的写法都不一定,没有通用性 所以这里没有提供查询的方法
SpringBoot 整合es(elasticsearch)使用elasticsearch-rest-high-level-client实现增删改的更多相关文章
- springboot整合es客户端操作elasticsearch(五)
springboot整合es客户端操作elasticsearch的总结: 客户端可以进行可以对所有文档进行查询,就是不加任何条件: SearchRequest searchRequest = new ...
- springboot整合es客户端操作elasticsearch(二)
在上章节中整合elasticsearch客户端出现版本问题进行了处理,这章来进行springboot整合得操作 环境:elaticsearch6.2.1,springboot 2.1.8 客户端版本采 ...
- springboot整合es客户端操作elasticsearch(四)
对文档查询,在实际开发中,对文档的查询也是偏多的,记得之前在mou快递公司,做了一套事实的揽件数据操作,就是通过这个来存储数据的,由于一天的数据最少拥有3500万数据 所以是比较多的,而且还要求查询速 ...
- springboot整合es客户端操作elasticsearch(三)
继续上个随笔: 那么我们只需要修改controller中文件就可以完成相关操作 本次主要是对文档得操作: 更新文档: package com.cxy.elasticsearch.controller; ...
- SpringBoot整合ES+Kibana
前言:最近在写一个HTTP代理服务器,记录日志使用的是ES,所以涉及到SpringBoot和ES的整合,整合完毕后又涉及到数据可视化分析,所以使用了Kibana进行管理,有些坑,需要记录一下 Spri ...
- ElasticSearch(三)springboot整合ES
最基础的整合: 一.maven依赖 <parent> <groupId>org.springframework.boot</groupId> <artifac ...
- 2.SSM整合_多表_一对一或多对一的增删改查
一对一和多对一配置一样,这里就放到一起. 1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件 多 接口 public interface NewsMapper { public vo ...
- SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑
习惯使用jpa操作对象的方式,现在用mybatis有点不习惯. 其实是懒得写SQL,增删改查那么简单的事情你帮我做了呗,mybatis:NO. 没办法,自己搞喽! 这里主要是实现了通过代码自动生成my ...
- Springboot+Mybatis+Clickhouse+jsp 搭建单体应用项目(三)(添加增删改查)
一.添加增加接口 @ApiResponses(value = { @ApiResponse(code = 200, message = "接口返回成功状态"), @ApiRespo ...
随机推荐
- 洛谷 P4272 - [CTSC2009]序列变换(堆)
洛谷题面传送门 u1s1 在我完成这篇题解之前,全网总共两篇题解,一篇使用的平衡树,一篇使用的就是这篇题解讲解的这个做法,但特判掉了一个点,把特判去掉在 BZOJ 上会 WA 一个点. 两篇题解都异常 ...
- P2336 [SCOI2012]喵星球上的点名(SA+莫队)
题面传送门 一道还算有点含金量的 SA 罢-- 首先按照套路我们把读入的所有字符串都粘在一起,中间用分隔符隔开并建出后缀数组出来. 我们考虑对于一个固定的字符串 \(s\),什么样的字符串 \(t\) ...
- Docker Nginx-Proxy 容器Nginx Proxy反向代理
Docker Nginx-Proxy 容器Nginx Proxy反向代理 简单介绍 Docker容器的自动Nginx反向代理 dockerhub地址 https://hub.docker.co ...
- 深入浅出KMP
前言:曾经有次在阿里的面试中遇到这个基础的问题,当时知道有这么回事,可是时间久了便 想不起来,可能是不怎么用到,基本调用库什么的,还有个是理解不深刻,不能得到show me the code 的程度, ...
- 前端2 — CSS — 更新完毕
1.CSS是什么? 指:Cascading Style Sheet --- 层叠样式表 CSS 即:美化网页( 在HTML不是说过W3C规定网页为三种标准嘛,结构层HTML已经玩了,而这个CSS就是 ...
- SpringCloud微服务实战——搭建企业级开发框架(三十):整合EasyExcel实现数据表格导入导出功能
批量上传数据导入.数据统计分析导出,已经基本是系统必不可缺的一项功能,这里从性能和易用性方面考虑,集成EasyExcel.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项 ...
- 一文搞懂指标采集利器 Telegraf
作者| 姜闻名 来源|尔达 Erda 公众号 导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个<详聊微服务观测>系列文章,深入 APM 系统的产品.架构 ...
- [源码解析] PyTorch分布式优化器(2)----数据并行优化器
[源码解析] PyTorch分布式优化器(2)----数据并行优化器 目录 [源码解析] PyTorch分布式优化器(2)----数据并行优化器 0x00 摘要 0x01 前文回顾 0x02 DP 之 ...
- Flink(三)【核心编程】
目录 一.Environment 二.Source 从集合读取数据 从文件读取数据 从kakfa读取数据(常用) 自定义数据源 三.Transform map Rich版本函数 flatMap key ...
- canal从mysql拉取数据,并以protobuf的格式往kafka中写数据
大致思路: canal去mysql拉取数据,放在canal所在的节点上,并且自身对外提供一个tcp服务,我们只要写一个连接该服务的客户端,去拉取数据并且指定往kafka写数据的格式就能达到以proto ...