引入依赖

 <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实现增删改的更多相关文章

  1. springboot整合es客户端操作elasticsearch(五)

    springboot整合es客户端操作elasticsearch的总结: 客户端可以进行可以对所有文档进行查询,就是不加任何条件: SearchRequest searchRequest = new ...

  2. springboot整合es客户端操作elasticsearch(二)

    在上章节中整合elasticsearch客户端出现版本问题进行了处理,这章来进行springboot整合得操作 环境:elaticsearch6.2.1,springboot 2.1.8 客户端版本采 ...

  3. springboot整合es客户端操作elasticsearch(四)

    对文档查询,在实际开发中,对文档的查询也是偏多的,记得之前在mou快递公司,做了一套事实的揽件数据操作,就是通过这个来存储数据的,由于一天的数据最少拥有3500万数据 所以是比较多的,而且还要求查询速 ...

  4. springboot整合es客户端操作elasticsearch(三)

    继续上个随笔: 那么我们只需要修改controller中文件就可以完成相关操作 本次主要是对文档得操作: 更新文档: package com.cxy.elasticsearch.controller; ...

  5. SpringBoot整合ES+Kibana

    前言:最近在写一个HTTP代理服务器,记录日志使用的是ES,所以涉及到SpringBoot和ES的整合,整合完毕后又涉及到数据可视化分析,所以使用了Kibana进行管理,有些坑,需要记录一下 Spri ...

  6. ElasticSearch(三)springboot整合ES

    最基础的整合: 一.maven依赖 <parent> <groupId>org.springframework.boot</groupId> <artifac ...

  7. 2.SSM整合_多表_一对一或多对一的增删改查

    一对一和多对一配置一样,这里就放到一起. 1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件 多 接口 public interface NewsMapper { public vo ...

  8. SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑

    习惯使用jpa操作对象的方式,现在用mybatis有点不习惯. 其实是懒得写SQL,增删改查那么简单的事情你帮我做了呗,mybatis:NO. 没办法,自己搞喽! 这里主要是实现了通过代码自动生成my ...

  9. Springboot+Mybatis+Clickhouse+jsp 搭建单体应用项目(三)(添加增删改查)

    一.添加增加接口 @ApiResponses(value = { @ApiResponse(code = 200, message = "接口返回成功状态"), @ApiRespo ...

随机推荐

  1. 洛谷 P7155 [USACO20DEC] Spaceship P(dp)

    Portal Yet another 1e9+7 Yet another 计数 dp Yet another 我做不出来的题 考虑合法的按键方式长啥样.假设我们依次按下了 \(p_1,p_2,\dot ...

  2. excel-大于0的数值标记红色且标记红色上箭头,小于0的数值标记绿色且标记绿色下箭头,等于0的数值标记黄色且标记右箭头

    0.数值是常规的数值: [蓝色]"↑"0;[红色]"↓"0;[黄色]"→"0 [蓝色]"↑"0.0;[红色]" ...

  3. nginx二级域名指向不同文件项目配置

    需要使用泛域名解析, 并且加上空的判断,以保证没有二级域名的也可以访问 核心配置 server_name ~^(?<subdomain>.+)\.caipudq\.cn$;if ( $su ...

  4. 19. 删除链表的倒数第 N 个结点

    目录 19.删除链表的倒数第N个节点 题目 题解-暴力 题解-哈希表 题解-双指针 19.删除链表的倒数第N个节点 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 输入:he ...

  5. SpringCloud微服务实战——搭建企业级开发框架(三十一):自定义MybatisPlus代码生成器实现前后端代码自动生成

      理想的情况下,代码生成可以节省很多重复且没有技术含量的工作量,并且代码生成可以按照统一的代码规范和格式来生成代码,给日常的代码开发提供很大的帮助.但是,代码生成也有其局限性,当牵涉到复杂的业务逻辑 ...

  6. [C++] vptr, where are you?

    Search(c++在线运行). 有的网站很慢--不是下面的程序有问题. #include <string.h> #include <stdio.h> #include < ...

  7. Flink(一)【基础入门,Yarn、Local模式】

    目录 一.介绍 Spark | Flink 二.快速入门:WC案例 pom依赖 批处理 流处理 有界流 无界流(重要) 三.Yarn模式部署 安装 打包测试,命令行(无界流) Flink on Yar ...

  8. 【Reverse】DLL注入

    DLL注入就是将dll粘贴到指定的进程空间中,通过dll状态触发目标事件 DLL注入的大概流程 https://uploader.shimo.im/f/CXFwwkEH6FPM0rtT.png!thu ...

  9. Shell学习(五)—— awk命令详解

    一.awk简介   awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...

  10. 【Services】【Web】【LVS】lvs基础概念

    1.简介 1.1. 作者:张文嵩,就职于阿里 1.2. LVS是基础四层路由.四层交换的软件,他根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机: 1.3. IPTABLES的请求转发路 ...