这一节我们来做就是如何为页面当中的分类编写结果集方法
首先我们先看到红框圈住的地方这里
我们就去封装这个分类方法,因为这个是键值对的形式,你可以从上图中看出来,所以我们采用封装List的键值对方法。
当然还有下面的品牌方法也是List。
最后别忘了写构造方法,一个是无参的构造,一个是有参的构造。
然后再记得为他写上继承方法,把泛型传进去
需要用到这个方法,这个是查询分类结果或者品牌结果的。
Service里面加上就不会报错
还要注意一下最后那里,要设置分类和品牌的参数进去,因为我们暂时还没有,所以可以设置为null
刚刚SearchResult页面有些错误,调整一下如下
我们这里可以去先定义一个分类名和品牌名,然后通过聚合的方法,添加分类名和品牌名,然后添加上他们的字段,分类名的字段就是cid3,品牌名字段就是brandId,这个的作用就是根据分类名和品牌名的字段对结果进行一个聚合,显示在选择栏处。
加下来我们就要写上下面的方法,先执行查询聚合,获取到结果集后,再进行一个解析和装扮成我们所要的类型
为什么要用到AggregatePage这个方法呢?本来我们这里是个Page方法的,但是Page方法里面并没有接收聚合结果集的方法,但是它的子集有这个方法,它的子集就是AggregatePage,所以我们强制转换成AggregatePage并且传入Goods,然后接收方式也是一样。
然后我们就可以获取聚合结果并且解析了,首先我们要看看我们要解析成哪种类型,然后就进行解析就行,
这就是我们要解析成为的类型。
把两个参数传进来就行,然后我们就要去编写两个get方法。
先来写一下获取品牌聚合的方法,首先先把传进来的聚合强制转换为Long类型的Terms字段(这个LongTerms是一种类型,类似的类型有StringTerms等),然后下面我们就要用到遍历的方法了,把terms里面的桶进行遍历,每一个桶当中返回一个通过品牌id查询品牌的方法,id从key中来,因为key是Long类型,最后用LongValue,而且前面也用了getKeyAdNumber。最终转换为一个集合
如果忘记bucket桶是什么的话,可以看看下图。
然后我们就去编写获取分类聚合的方法,首先也是强制转换LongTerms,然后遍历每个桶,因为我们这个是键值对,所以需要new一个HashMap,然后获取分类id也就是key,然后通过id查找分类名字,这里要注意的是,ids是一个集合类型,我们只传入一个id进行查找,也是可以的,但首先要把id传进一个集合里面,即使这个集合只有id一个子集也好,也可以照样执行查询,返回一个List,然后把键值对传进去,最终返回一个map,这个map就是方法中的返回值类型List《Map》《String,Object》
然后重启服务器,刷新页面后,返回来看看,这里已经可以返回数值了,一个是品牌,一个是分类