【微服务】162:利用Java实现索引库相关的分页、排序和聚合( 二 )


order()方法说明排序方式 。
其可以链式编程不停地添加查询条件 。
再调用search方法完成查询
使用自定义的itemRepository接口调用search()方法 , 同时说明查询条件 , 也就是原生的查询只是说明了下查询条件 。
查询结果测试
【微服务】162:利用Java实现索引库相关的分页、排序和聚合
文章图片
match匹配“小米手机” , 查询数据有3条 。
在分页的时候就说明了每页显示2条数据 , 所以这里一共有2页数据 。
当前显示的是首页 , 也就是第0页 。
三、原生的聚合
先对聚合做一个简单的回顾:
【微服务】162:利用Java实现索引库相关的分页、排序和聚合
文章图片
其实无外乎还是那核心4个步骤:
aggs说明这是一个聚合 。
给该聚合自定义一个名称 。
说明聚合类型:桶有自己对应到的各种类型 , 度量也有自己对应的各种类型 , 上述例子中是桶里面的terms类型 。
说明聚合字段:brand 。 也就是根据brand字段划分成多个桶 。
好 , 这是在Elasticsearch中的使用 , 那如何用Java代码来操作它呢?
【微服务】162:利用Java实现索引库相关的分页、排序和聚合
文章图片
创建构造器
这个和原生的查询一样 , 都是使用该构造器 。
添加聚合
这一段代码就将聚合的三要素都说清楚了 。
聚合名叫什么?叫popularBrand 。
聚合是什么类型?terms()方法也就是terms类型 , 不同的类型在Java中对应不同的方法 。
聚合字段是哪个?field说明是brand字段、
得到聚合结果
使用elasticsearchTemplate查询聚合 , 返回聚合结果 。
结果解析
这段代码就有点复杂了 , 我们做一个对比 。
【微服务】162:利用Java实现索引库相关的分页、排序和聚合
文章图片
利用kibana响应的是一个json数据 , Java中的这段代码其实也就是对json数据的解析 。
getAggregations() , 聚合是可以嵌套有多个的 , 只不过例子中只写了一个聚合 。
get():根据聚合名找到需要的那个聚合 。
getBuckets():找到对应的桶数据 。 json数据中还有一些其它数据 , 而我们自然需要的也就是buckets数据 。
获取桶中对应的数据 。
说白了Java对聚合的解析其实也就是对json数据的解析过程 , 就算不是聚合 , 其它json数据的解析思路都是一样的 。
最后
行有不得反求诸己 , 我是@刘小爱
一个白天上班晚上学习的95后沪漂 , 不为其它 , 只为学会自律做好自己 , 也愿我的每日打卡能给你带来勇气 , 欢迎点赞关注和评论 。