1.新建springboot工程,增加es依赖和配置

pom.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cz</groupId><artifactId>springboot_es_demo</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_es_demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><elasticsearch>7.12.1</elasticsearch></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client-sniffer</artifactId><version>${elasticsearch}</version></dependency><!--<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.5.10</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

springboot版本2.5.4,对应的spring-boot-starter-data-elasticsearch为4.2.4,而对应的elasticsearch-client为7.12.1

application.yml增加配置:

spring:elasticsearch:rest:uris: 192.168.220.136:9200sniffer:interval: 5000msdelay-after-failure: 15000ms

uris为es连接地址,和elasticsearch-head-master连接地址一样

当然spring.elasticsearch.rest还有其他属性,可以根据实际情况设置

2.编写controller获取es信息

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.cluster.ClusterHealth;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/es")
public class EsLogController {@Autowiredprivate ElasticsearchRestTemplate elasticsearchRestTemplate;@GetMapping("/getEsInfo")public ClusterHealth getEsInfo() {return elasticsearchRestTemplate.cluster().health();}
}

利用ElasticsearchRestTemplate的实体对es进行操作,然后也可以使用RestHighLevelClient对象来进行操作,如上为获取集群信息

3.启动项目,验证结果

启动后

可以看到有一条警告,因为我客户端使用版本为7.12.1,es版本为7.13.2,但目前使用还没发现有什么问题,待验证

浏览器输入http://localhost:8080/es/getEsInfo结果为:

{
  "clusterName": "my_elasticsearch",
  "status": "GREEN",
  "numberOfNodes": 3,
  "numberOfDataNodes": 3,
  "activeShards": 36,
  "relocatingShards": 0,
  "activePrimaryShards": 16,
  "initializingShards": 0,
  "unassignedShards": 0,
  "activeShardsPercent": 100.0,
  "numberOfPendingTasks": 0,
  "timedOut": false,
  "numberOfInFlightFetch": 0,
  "delayedUnassignedShards": 0,
  "taskMaxWaitingTimeMillis": 0
}

clusterName为es集群名称,status为集群状态,总三个节点

4.操作es

对于es的操作可以注入ElasticsearchRestTemplate来操作,也可以使用ElasticsearchRepository来操作

1.创建实体类

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;import java.io.Serializable;
import java.util.Date;@Data
@Document(indexName = "log")
@Setting(shards = 1, replicas = 2)
public class EsLog implements Serializable{private static final long serialVersionUID = 1L;@Idprivate String id;private String createBy;@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")@Field(type = FieldType.Date, index = false, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime = new Date();private Long timeMillis = System.currentTimeMillis();private String updateBy;private Integer delFlag;@Field(type = FieldType.Text)private String name;private Integer logType;private String requestUrl;private String requestType;private String requestParam;private String username;private String ip;private String ipInfo;private Integer costTime;}

对于注解@Document,主要需要设置indexName,即索引名称,es新建索引还有其他两个主要属性,分片数和副本数,这个在@Document默认为1,切过时了,看源码可知,需在@Setting中设置

这里节点为3个,所以@Setting(shards = 1, replicas = 2),所以副本为2

注解@Document中还有两个属性createIndex和useServerConfiguration

createIndex=true时,表示当Spring应用程序启动时,如果配置的索引不存在,则Spring会创建索引

useServerConfiguration=true时,当Spring创建索引时,Spring不会在创建的索引中设置以下设置:shards,replicas,refreshInterval和indexStoreType.这些设置将是Elasticsearch默认值

通过源码可以看到createIndex默认为true,useServerConfiguration默认为false,重新启动后可以通过head插件看到多了log索引

注解@Field相当于数据库字段,主要有name(字段名称)和tyep(字段类型)属性

Document相当于数据库一行记录,index相当于表名

2.创建dao

import com.cz.springboot_es_demo.entity.EsLog;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface EsLogDao extends ElasticsearchRepository<EsLog, String> {}

ElasticsearchRepository<T, ID>中T为实体类型,ID为id的类型,这里id为String类型

3.操作

1.添加到es

@Autowired
private EsLogDao logDao;@PostMapping("/save")
public EsLog save() {EsLog log = new EsLog();return logDao.save(log);
}

2.通过ID查询

@GetMapping("/findOne/{id}")
public EsLog findOne(@PathVariable("id") String id) {return logDao.findById(id).get();
}

3.分页查询

@GetMapping("/findPage")
public SearchHits<EsLog> findPage() {Long start = DateUtil.parse("2021-09-21 21:00:00").getTime();Long end = DateUtil.endOfDay(DateUtil.parse("2021-09-21 22:00:00")).getTime();Pageable pageable = PageRequest.of(0, 2, Sort.by(Sort.Direction.DESC, "createTime"));CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("name").is("查询"));criteriaQuery.addCriteria(new Criteria("timeMillis").between(start, end));criteriaQuery.setPageable(pageable);SearchHits<EsLog> searchHits = elasticsearchRestTemplate.search(criteriaQuery, EsLog.class);return searchHits;
}

springboot中整合elasticsearch(基于springboot2.5.4,es版本7.13.2)相关推荐

  1. SpringBoot Data整合ElasticSearch

    SpringBoot Data整合ElasticSearch pom依赖 <!-- spring data和es的start依赖,会引入关联的elasticsearch-rest-high-le ...

  2. 【SpringBoot】44、SpringBoot中整合JWT实现Token验证(整合篇)

    什么是JWT? Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519),该 token 被设计为紧凑且安全的,特别适用于分 ...

  3. springboot中整合mybatis及简单使用

    springboot中整合mybatis及简单使用 1.引入依赖 2.在applicaiton.yaml中配置数据源以及mybatis 3.创建sql测试表 4.编写mapper接口和mapper.x ...

  4. 【SpringBoot】43、SpringBoot中整合RabbitMQ实现延时队列(延时插件篇)

    死信队列实现篇,参考文章:[SpringBoot]60.SpringBoot中整合RabbitMQ实现延时队列(死信队列篇) 一.介绍 1.什么是延时队列? 延时队列即就是放置在该队列里面的消息是不需 ...

  5. 在SpringBoot中整合使用Netty框架提供WebSocket服务

    在SpringBoot中整合使用Netty框架 Netty是一个非常优秀的Socket框架.如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择. Netty ...

  6. 【SpringBoot】22、SpringBoot中整合knife4j接口文档

    在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护 接口文档使得项目开发过程中前后端工程师 ...

  7. springboot之整合Elasticsearch实现搜索

    集成Elasticsearch实现简单搜索 目录 前言 es版本说明 整合es 线程池管理 api说明 码上有戏 测试 源码地址 参考文章 目录 前言 Elasticsearch是一个基于Lucene ...

  8. 【SpringBoot】整合Elasticsearch 操作索引及文档

    官网操作文档:Elasticsearch Clients | Elastic 踩坑太多了...这里表明一下Spring Boot2.4以上版本可能会出现问题,所以我降到了2.2.1.RELEASE.对 ...

  9. netty结合java_在SpringBoot中整合使用Netty框架的详细教程

    Netty是一个非常优秀的Socket框架.如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择. Netty与SpringBoot的整合,我想无非就是要整合 ...

  10. 【SpringBoot】3、SpringBoot中整合Thymeleaf模板引擎

    SpringBoot 为我们提供了 Thymeleaf 自动化配置解决方案,所以我们在 SpringBoot 中使用 Thymeleaf 非常方便 一.简介 Thymeleaf是一个流行的模板引擎,该 ...

最新文章

  1. IDEA 2020.2 稳定版发布,带来了不少新功能...
  2. mysql数据库指定ip远程访问
  3. 【数据结构与算法】之深入解析“灯泡开关”的求解思路与算法示例
  4. bellman ford java_Java C 实现Bellman-ford算法
  5. ae可围绕帧拖动放大插件:Drag Zoom Pro for AE mac(兼容M1)
  6. 质量不同的球java编程_荐非常经典的java编程题全集-共50题(1-10)...
  7. 鼠标hover表格头部信息出现闪烁
  8. Webservice 用http get方式无法请求到的解决办法
  9. 电脑连接上无线网却没有网,手机却能上网怎么解决
  10. 编程常用小技巧(持续更新~)
  11. 一步教你轻松实现--Word方括号打勾☑
  12. 盘点世界十大著名黑客攻击事件
  13. 三位共阴数码管动态显示按键控制加减
  14. 非图形化流程定义部件的要素
  15. android 悬浮窗口出现蓝线,在我的Android应用程序导航栏上方的浅蓝色线条
  16. 用 leangoo进行自我账目管理
  17. 李宏毅深度强化学习(国语)课程(2018) 笔记(八)Imitation Learning
  18. 购买投资性房地产的7项原则
  19. 正规网上兼职赚钱日结,来看看小心别被骗!
  20. CAD画图教程:CAD怎么画一条指定长度的线?

热门文章

  1. 学了计算机很迷茫怎么办?计算机大三学生怎么找实习工作?
  2. 以迅雷链为首的中国区块链,用技术赋能行业实现突围
  3. 分配销售组织 - 分销渠道 - 工厂
  4. S3C2410,ARM920T,试题总结
  5. 矩阵的广义逆——减号、加号广义逆的求法
  6. 【python爬虫】http.cookiejar库之CookieJar,模拟登录与访问
  7. java 网站微信登录_网站微信授权登录-JAVA版
  8. python数组冒号使用_python矩阵冒号
  9. 屏幕快照之旅:Android 4.2 Jelly Bean的10个新功能
  10. java系统过载保护_浅谈过载保护