SpringBoot集成Elasticsearch7.6
前言:
本文不赘述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的更多相关文章
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- SpringBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
- springboot集成redis(mybatis、分布式session)
安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...
- SpringBoot集成jsp
一.springBoot集成jsp: 1.修改pom文件 <!--集成jsp所需jar包--> <!--jsp页面使用jstl标签--> <dependency> ...
随机推荐
- The Meaningless Game,算是思维吧。
题目直接链接 题意: 某游戏规则:每次选定数字k(正整数),两人初始分数为1,获胜者分数乘k2,失败者分数成k,给你两个数字,判断是否可能是本游戏的两人的得分. 分析: 为啥题意我不写判断两个数可不可 ...
- scrapy框架携带cookie访问淘宝购物车
我们知道,有的网页必须要登录才能访问其内容.scrapy登录的实现一般就三种方式. 1.在第一次请求中直接携带用户名和密码. 2.必须要访问一次目标地址,服务器返回一些参数,例如验证码,一些特定的加密 ...
- JavaScript图形实例:H分形
H分形是由一个字母H演化出迷宫一样场景的分形图案,其构造过程是:取一个中心点(x,y),以此中心点绘制一条长为L的水平直线和两条长为H的竖直直线,构成一个字母“H”的形状:再以两条竖直直线的上下共4个 ...
- PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击!
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第27文章,我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法. 我们都知道,图片 ...
- HTB::OpenAdmin
实验环境 渗透过程 0x01 信息搜集 sudo nmap -sS -p1-10000 -sV -sC -T4 10.10.10.171 开放了22(SSH)端口和80(HTTP)端口 访问80端口, ...
- java 面向对象(四十三):反射(七)反射应用四:动态代理
1.代理模式的原理:使用一个代理将对象包装起来, 然后用该代理对象取代原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方法调用转到原始对象上. 2.静态代理2.1 举例:实现Ru ...
- Flask 基础组件(十):中间件
from flask import Flask, flash, redirect, render_template, request app = Flask(__name__) app.secret_ ...
- Android 性能优化 ---- 启动优化
Android 性能优化 ---- 启动优化 1.为什么要进行启动优化 一款应用的第一印象很重要,第一印象往往决定了用户的去留.打开一款应用,如果速度很快,很顺畅,那么很容易让人觉得这款应用背后的技术 ...
- DirectX11 With Windows SDK--34 位移贴图
前言 在前面的章节中,我们学到了法线贴图和曲面细分.现在我们可以将这两者进行结合以改善效果,因为法线贴图仅仅只是改善了光照的细节,但它并没有从根本上改善几何体的细节.从某种意义上来说,法线贴图只是一个 ...
- SQL 给某字段添加汉字却显示??
错误展示: 解决方案: 1.在要修改的数据库上单击鼠标右键,并选择“属性”. 2.在弹出的数据库属性窗口中点击“选择页”中的“选项”. 3.将排序规则由默认的SQL_Latin1_Genera ...