温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何利用Java实现索引库相关的分页、排序和聚合

发布时间:2021-07-26 21:29:45 来源:亿速云 阅读:259 作者:chen 栏目:大数据

这篇文章主要讲解了“如何利用Java实现索引库相关的分页、排序和聚合”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用Java实现索引库相关的分页、排序和聚合”吧!

学习计划安排,利用Java代码来实现对索引库的各种操作:
通过自定义方法实现匹配查询、范围查询。
原生的查询代码又是如何编写的?
最后还有聚合相关的代码编写。
一、自定义方法
昨天学了最基础的几种增删改查方法,但查询在实际应用中显然没这么简单。
比如用户要匹配查询,前几天我们有学过,有match匹配和term匹配两种常用的方式。
这些在Java中又是哪些方法来对应呢?
有原生的方法可以是使用,但是比较麻烦,这里使用springdata提供的自定义方法。
1自定义方法实现多种查询方法
昨天有使用到findAll()方法,这是自带的方法,看其语义也就能知道其实查询所有数据。
但是很多时候并不是一个查询所有方法就能解决的,所以需要自己自定义说明。
①queryItemsByTitleMatchs
方法名一定要按照其格式来,一看到也就很好理解,是根据Title这个字段匹配查询。
其中后面还可以接“And”“Or”这些逻辑运算,实现布尔查询。
②queryItemsByPriceBetween
一样的道理,范围查询也有其格式,也就是between这个单词的使用。

如何利用Java实现索引库相关的分页、排序和聚合

2自定义方法的使用
①根据Title词条匹配
直接调用自定义的match匹配方法,在参数中说明要搜索的关键字是“小米手机”,这样就能match匹配到和“小米手机”相关的数据了。
②根据price范围查询
直接调用自定义的范围查询方法,在参数中说明价格区间是2000-4000,这样也就能范围查询出这个价格区间相关的数据了。
3运行方法,观察结果
①“小米手机”匹配结果
这个前几天专门说明过,因为title这个字段类型是text,是要分词的,所以“小米手机”被分词成了“小米”和“手机”。
只要是和上述分词相关的数据都会被查询出来,所以“坚果手机”也被查询出来了。
②价格在2000-4000区间的数据
结果也就显而易见了,如上图所示。
二、原生的查询
自定义方法虽然很简单,但有时候不能很好地实现业务需求,比如查询条件过多时。
这个时候就需要结合官方提供的原生查询了。
①创建查询的构造器
NativeSearchQueryBuilder也就是原生搜索查询构造器的意思,通过它也就可以添加各种查询条件。
②添加查询条件
withQuery():QueryBuilders说明查询
例子中是match匹配查询,所以在Java中也就是matchQuery方法,参数:title是字段,“小米手机”是该字段对应的数据。
withPageable():PageRequest实现分页
of()方法即可实现分页,其中页面数从0页开始,每页大小上述图中指定的是2。
withSort():SortBuilders实现排序
fieldSort()方法说明需要排序的字段。
order()方法说明排序方式。
其可以链式编程不停地添加查询条件。
③再调用search方法完成查询
使用自定义的itemRepository接口调用search()方法,同时说明查询条件,也就是原生的查询只是说明了下查询条件。
查询结果测试
match匹配“小米手机”,查询数据有3条。
在分页的时候就说明了每页显示2条数据,所以这里一共有2页数据。
当前显示的是首页,也就是第0页。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。读后感(https://www.yuananren.com)Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点   。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等  。
总之:自定义方法之后,不需要我们写具体是如何查询的了,可以直接使用,但是方法名需要遵循命名规范,如果不能正常使用,极有可能就是方法名格式不对。
三、原生的聚合
先对聚合做一个简单的回顾:
其实无外乎还是那核心4个步骤:
aggs说明这是一个聚合。
给该聚合自定义一个名称。
说明聚合类型:桶有自己对应到的各种类型,度量也有自己对应的各种类型,上述例子中是桶里面的terms类型。
说明聚合字段:brand。也就是根据brand字段划分成多个桶。
好,这是在Elasticsearch中的使用,那如何用Java代码来操作它呢?
①创建构造器
这个和原生的查询一样,都是使用该构造器。
②添加聚合
这一段代码就将聚合的三要素都说清楚了。
聚合名叫什么?叫popularBrand。
聚合是什么类型?terms()方法也就是terms类型,不同的类型在Java中对应不同的方法。
聚合字段是哪个?field说明是brand字段、
③得到聚合结果
使用elasticsearchTemplate查询聚合,返回聚合结果。
④结果解析
这段代码就有点复杂了,我们做一个对比。
利用kibana响应的是一个json数据,Java中的这段代码其实也就是对json数据的解析。
getAggregations(),聚合是可以嵌套有多个的,只不过例子中只写了一个聚合。
get():根据聚合名找到需要的那个聚合。
getBuckets():找到对应的桶数据。json数据中还有一些其它数据,而我们自然需要的也就是buckets数据。
获取桶中对应的数据。
说白了Java对聚合的解析其实也就是对json数据的解析过程,就算不是聚合,其它json数据的解析思路都是一样的。

感谢各位的阅读,以上就是“如何利用Java实现索引库相关的分页、排序和聚合”的内容了,经过本文的学习后,相信大家对如何利用Java实现索引库相关的分页、排序和聚合这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI