前言:

本文不赘述Elasticsearch的相关基础知识点和部署,只介绍如何在SpringBoot如何集成Elasticsearch并进行数据操作

Spring Data项目中提供了操作es的框架Spring Data Elasticsearch,目前框架最新版本为4.0

根据Spring Data Elasticsearch的官方文档描述,4.0版本的框架支持Elasticsearch版本最新为7.6,更新的版本应该是不支持的

我自己在学习Elasticsearch过程中,发现网上SpringBoot集成es操作的相关博客资料不是很多,而且大多数版本比较旧、普通都很简略(可能过个一年半载我这篇文章也会被淘汰了hh),Elasticsearch的版本迭代是很快的,所以建议大家在学习一些比较新的技术或框架的时候,最好是配合官方文档进行资料查阅,英文不好可以借助翻译工具,有时能够避免很多弯路


1、创建SpringBoot项目,引入Spring Data Elasticsearch依赖,目前默认版本是4.0

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2、配置文件

spring:
application:
name: es-demo
elasticsearch:
rest:
uris: http://localhost:9200 #es服务器地址(默认) server:
port: 8080

3、创建一个Book类,相当于Elasticsearch中的文档,用于演示

@Document(indexName = "book")
public class Book { //@Id注解表明该字段是文档id
@Id
private Integer id; private String title; private BigDecimal price; @Field(type = FieldType.Keyword)
private List<String> tag; //此处省略getter、setter、toString...
}

项目构建并配置完成后,就可以使用Spring Data Elasticsearch框架提供的各种类进行操作了


用法一:基于JPA Repository的方式,继承ElasticsearchRepository接口后,方法名按照框架要求的命名规则,就能创建各种各样的条件查询,适合一些比较简单的查询操作,更详细的可以参考文档(https://docs.spring.io/spring-data/elasticsearch/docs/4.0.2.RELEASE/reference/html/#elasticsearch.query-methods.criterions

1、创建用于Book对象的增删改查接口

@Repository
public interface BookRepository extends ElasticsearchRepository<Book, Integer> { //findById()和save()之类的方法父接口已经写了,这里无需重复编写 //按价格区间查询
List<Book> findByPriceBetween(BigDecimal min, BigDecimal max); //按书名查询,因为使用了中文分词器ik,所以这里并不是精确查询
List<Book> findByTitle(String title); //按标签匹配查询
List<Book> findByTagIn(List<String> tags);
}

接口写好后,使用@Autowired注解自动注入即可使用,具体测试这里不赘述

用法二:高级Rest接口,使用ElasticsearchRestTemplate类操作,除了支持简单数据增删改查之外,还支持对索引进行操作;配合查询条件/聚合构造器NavtiveQueryBuilder、QueryBuilders、AggregationBuilders,可以进行一些复杂的查询和聚合操作,但需要对Elasticsearch的Query DSL比较熟悉

@SpringBootTest
public class EsRestTemplateTest { //自动注入即可使用
@Autowired
private ElasticsearchRestTemplate esRestTemplate; //按id查询
@Test
void testQueryBookById() {
Book book = esRestTemplate.get("1", Book.class);
Assertions.assertNotNull(book);
System.out.println(book.toString());
} //按书名查询
@Test
void testQueryBookByTitle() {
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("title", "Java"))
.build();
SearchHits<Book> searchHits = esRestTemplate.search(searchQuery, Book.class);
//SearchHits就是查询的结果集
searchHits.get().forEach(hit -> {
System.out.println(hit.getContent());
});
} //聚合操作-计算所有书籍的平均价格
@Test
void testAggregationBookAvgPrice() {
//聚合名为avg_price,对price字段进行聚合,计算平均值
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.addAggregation(AggregationBuilders.avg("avg_price").field("price"))
.build();
SearchHits<Book> searchHits = esRestTemplate.search(searchQuery, Book.class);
searchHits.get().forEach(hit -> {
System.out.println(hit.getContent());
});
//获取聚合结果
if (searchHits.hasAggregations()) {
ParsedAvg parsedAvg = searchHits.getAggregations().get("avg_price");
Assertions.assertNotNull(parsedAvg, "无聚合结果");
System.out.println(parsedAvg.getValue());
}
} //......
}

以上是ElasticsearchRestTemlpate类的简单用法,其他用法可以自行探索,构造器的方法名都和Elasticsearch的Query DSL基本一致,所以如果对Query DSL比较熟悉的话,用起来也不会很难


项目代码:https://github.com/ahrenJ/springboot-es

SpringBoot集成Elasticsearch7.6的更多相关文章

  1. 【springBoot】springBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  2. SpringBoot集成security

    本文就SpringBoot集成Security的使用步骤做出解释说明.

  3. springboot集成Actuator

    Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...

  4. SpringBoot集成Shiro并用MongoDB做Session存储

    之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...

  5. SpringBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  6. springboot集成mybatis(二)

    上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...

  7. springboot集成mybatis(一)

    MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...

  8. springboot集成redis(mybatis、分布式session)

    安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...

  9. SpringBoot集成jsp

    一.springBoot集成jsp: 1.修改pom文件 <!--集成jsp所需jar包--> <!--jsp页面使用jstl标签--> <dependency> ...

随机推荐

  1. Spreading the Wealth,思维

    题目去洛谷 题意: 很清晰,n个人,每人有一些硬币硬币总数sum≡0(mod n),通过一些互相交换,使硬币数平均(即每人有相同个数的硬币) 分析: 还是有点思维含量的,我们这样想,我们其实就是要确定 ...

  2. mac篇---iterm2的基本常用命令

    标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...

  3. Jenkins+tomcat自动发布的热部署/重启及遇到的坑解决办法

    一.背景 公司的项目一直手动maven打包.上传服务器.关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的Jenkins插件一键自动 ...

  4. 最新Spark入门篇

    一.Spark简介 1.什么是Spark Apache Spark是一种快速的集群计算技术,基于Hadoop MapReduce技术,扩展了MapReduce模型,主要特性是在内存中集群计算,速度更快 ...

  5. Mysql基础(八):MySQL 表的一对一、一对多、多对多问题

    将实体与实体的关系,反应到最终数据库表的设计上,将关系分为三种:一对一,一对多(多对一)和多对多,所有的关系都是表与表之间的关系; 一对一 一对一:一张表的一条记录只能与另外一条记录进行对应,反之亦然 ...

  6. scrapy 基础组件专题(三):爬虫中间件

    一.爬虫中间件简介 图 1-1 图 1-2 开始这一张之前需要先梳理一下这张图, 需要明白下载器中间件和爬虫中间件所在的位置 下载器中间件是在引擎(ENGINE)将请求推送给下载器(DOWNLOADE ...

  7. Python之常用模块学习(二)

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  8. 前端06 /JavaScript之BOM、DOM

    前端06 /JavaScript 目录 前端06 /JavaScript 昨日内容回顾 js的引入 js的编程要求 变量 输入输出 基础数据类型 number string boolean null ...

  9. IOS中input键盘事件keyup 的兼容解决办法

    用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中很慢,用输入法输入之后,并未立刻相应keyup事件. 解决办法: 在ios设备上可以用html5的input事件 ...

  10. DEX文件解析--3、dex文件字符串解析

    一.前言    前两篇文章链接:     1.DEX文件头解析     2.DEX文件校验和解析    PS:前几天检查文件夹的时候发现DEX文件解析还只写了开头,正好找点事情来做,就去接着解析DEX ...