袁庭新老师ES系列18节|Spring Data Elasticsearch高级
前言
这一章节袁老师将带领同学们来学习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的所有内容袁老师就给大家介绍到这里。还有很多前沿技术等着大家去探索,“路漫漫其修远昔,吾将上下而求索”。最后,祝愿各位小伙伴未来学业有成,一切如意!