欢迎光临散文网 会员登陆 & 注册

袁庭新老师ES系列18节|Spring Data Elasticsearch高级

2023-09-22 12:59 作者:袁庭新  | 我要投稿

前言

这一章节袁老师将带领同学们来学习Spring Data Elasticsearch高级操作相关的内容。我们继续来探索SDE是如何将原始操作Elasticsearch的客户端API进行封装的,以及通过Spring Data Elasticsearch如何来操作ES。准备好了吗?我们继续来探索ES的内容。

一. 索引数据CRUD操作

SDE的索引数据CRUD操作并没有封装在ElasticsearchTemplate类中,封装在ElasticsearchRepository这个接口中。

首先在com.yx.respository包下,需要自定义一个ProductRepository的接口,该接口需要继承ElasticsearchRespository<Product>接口。

1.创建索引数据

创建索引数据时,有单个创建和批量创建之分。

1.先来看单个创建。在SpringDataESTests类中定义addDocument()方法。

2.再来看批量创建。在SpringDataESTests类中定义addDocuments()方法。

2.查询索引数据

2.1.根据id查询数据

ElasticsearchRepository接口中封装了根据id查询的findById(ID var1)方法。

1.在SpringDataESTests类中定义findById()方法。

2.运行findById()方法,输出结果见下:

2.2.查询所有数据

ElasticsearchRepository接口中封装了查询所有数据的findAll()方法。

1.在SpringDataESTests类中定义findAll()方法。

2.运行findAll()方法,输出结果见下:

3.自定义方法查询

3.1.存储库查询关键字

ElasticsearchRepository提供的查询方法有限,但是它却提供了非常强大的自定义查询功能。只要遵循Spring Data Elasticsearch提供的语法,我们可以任意定义方法声明。

3.2.自定义方法查询案例

1.在ProductRepository接口中定义根据商品的价格区间查询商品数据的findByPriceBetween()方法。

2.无需写实现,SDE会自动帮我们实现该方法,我们只需要用即可。在SpringDataESTests类中定义findByPriceBetween()方法。

3.运行findByPriceBetween()方法,输出结果见下:

二. 原生查询

1.原生查询介绍

如果觉得上述接口依然不符合你的业务需求的话,SDE也支持原生查询的操作。这个时候还是使用ElasticsearchTemplate,而查询条件的构建是通过一个名为NativeSearchQueryBuilder的类来完成的,不过这个类的底层还是使用的原生API中的QueryBuilders、AggregationBuilders、HighlightBuilders等工具来实现的。

2.原生查询案例

需求描述:

  • 查询title中包含“手机”的商品;

  • 且以价格升序进行排序;

  • 进行分页查询:每页展示2条数据,查询第1页;

  • 最后对查询结果进行聚合分析:获取品牌及个数。

1.在SpringDataESTests类中定义nativeQuery()方法。

注意:上述查询不支持高亮结果。

2.运行nativeQuery()方法,输出结果见下:

三. 高亮显示

1.高亮显示需求

需求描述:查询title中包含“小米手机”的商品,并将title中对应的分词通过<span style='color:red'></span>标签进行高亮修饰。

2.高亮显示实现

1.在com.yx.mapper包下自定义搜索结果映射ProductSearchResultMapper类。

2.高亮实现。重构nativeQuery()方法,使用自定义查询结果映射,来实现高亮显示。

3.运行nativeQuery()测试方法后,输出结果见下。

四. 结语

Spring Data Elasticsearch基于spring data API大大简化了Elasticsearch的操作,从而简化开发人员的代码,提高开发效率。然后我们给大家介绍了使用Spring Data对Elasticsearch进行了增、删、改、查操作。

同学们,关于Elasticsearch的所有内容袁老师就给大家介绍到这里。还有很多前沿技术等着大家去探索,“路漫漫其修远昔,吾将上下而求索”。最后,祝愿各位小伙伴未来学业有成,一切如意!

袁庭新老师ES系列18节|Spring Data Elasticsearch高级的评论 (共 条)

分享到微博请遵守国家法律