00:00
那接下来我们再来加上我们最后的查询,聚合分析,每一次查询呢,我们都需要进行聚合分析,最终得到我们所需要的这些结果,比如我们当前所有查询到的商品,他们所涉及到的品牌、价格,包括这些属性,那么这些东西呢,就是通过聚合分析得到的,那整个聚合分析的DSL我们也在这儿,那么现在呢,我们就要按照这个DSL来构建出来。那么现在来打开我们的这个service,我们现在来聚合分析,这个聚合分析呢,没有任何条件的聚合分析,无论怎样我们都要进行分析,所以呢,我们现在使用source builder聚合分析呢,有一个叫aggregation,好就是它,然后呢,我们这个aggregation里边要传一个aggregation builder,那这个build我们就继续来加上这个builder呢,我们想着应该会有一个aggregation builders,好我们来看一下aggregation builders,确实那接下来呢,我们来看一下,那现在aggregation就是这个AJ,我们想要做的第一个聚合是来聚合品牌信息,第二个来聚合分类信息,还有我们来聚合属性信息。
01:11
那这三大聚合呢,我们就来写上,首先我们来看我们的这个服务来聚合aggregation builds,点一个,那么现在呢,看第一个聚合,第一个聚合呢,我们是一个terms聚合,要说聚合类型我们是一个terms,所以呢,我们就在这得构建一个点一个我们叫terms,我们想要进行一个terms聚合,那这个terms聚合它要输一个名字,那么就为这次聚合取一个名字叫brand atg,好,我们就取为为他那们在brand agg。那在这个聚合里边呢,我们来点开看,它是按照我们指定的属性聚合的。所以我们来把这个聚合我们先拿过来,这是我们做的brand agg的聚合,把这个聚合我们放进去,那这个聚合的详细信息我们继续来写上,这是我们聚合的第一种,我们叫品牌聚合,那品牌聚合的详细信息呢,我们来继续来写上,Brand agg里边,那么要聚合哪个属性,所以我们在这会写一个field,那么要聚合的属性呢,那就是对应的我们这个terms里边brand ID,好,我们拿过来,这个brand ID我们来写上,包括呢,我们可以来指定size,我们要查多少个记录,可能我们这个聚合的品牌内容可能有很多,我们size呢,比如我们就来写一个50,最多呢拿到50个,这什么说的品牌聚合,接下来我们继续品牌聚合里边呢,我们发现我们只写了前面的brand ID,这个聚合,这个terms,而在这个品牌聚合里边呢,还有子聚合,子聚合呢,我们有两个,一个是brand name和brand。
02:52
Image,所以呢,我们接接下来还要加上这两个聚合,那么继续来在它里边来我们品牌聚合的子聚合,来加上品牌聚合的子聚合,这个子聚合呢,是要分析出它的品牌名字以及品牌图片,那么还是在这个brand agg里子聚合使用sub aggresss,就是我们这个子聚合,子聚合里边呢,还传入我们这个聚合条件,因为我们现在来看到我们现在呢有两个词句合,所以呢,我们可以在这来写上我们要进行两个子句合,Sub aggssion。
03:29
那我们两个子聚合,我们先来看第一个子聚合,第一个子聚合呢,相当于它还是一个term聚,聚合名字呢叫它,所以呢,我们就来构建出第一个聚合。我们就直接用这个aggression builders好。点一个terms名字呢,我们来给它起一个名字,这是这个聚合的名字,包括聚合用的属性,我们也来指定上聚合用的属性,好,这是第一个聚合,聚合的属性我们来看一下,它叫brand name,把这个复制过来。
04:04
而且呢,每一个品牌的名字,只要ID一定,它肯定呢只有一个值,所以呢,我们还可以指定上SIZE1啊,那就是我们按照这个当前的品牌ID看它有多少种名字,肯定只有一个名字,包括呢它只有一个图片,那么现在继续来聚合,在这呢,再来聚合找到它的图片aggregation builders点一个。我们还是使用terms聚合来看第二个聚合,第二个聚合呢,我们的名字叫brand image agg,我们相当于把这个条件呢,我们都得转换成这些代码,好再点一个field,我们要聚合用的属性,这个属性呢来展开,那就是这个品牌的。图片好,我们属性用它同样的size呢,也是一个好,这就是我们品牌的整个聚合,先聚合出按照品牌ID聚合出我们到底用了多少种品牌,然后再聚合出每一个品牌的名字以及图片子,聚合呢,那就是根据ID再来找到它的其他可能。
05:09
那接下来我们品牌聚合完了,我们接下来继续,那还有一个聚合,这个聚合呢,我们把这个缩掉,我们现在叫catalog agg,这相当于是我们的分类聚合,那现在呢,还要看我们当前查询到的这些所有商品所属于哪些分类,那这个品牌聚合我们就来放到这儿,它就结束了。分类聚合也一样,我们还是使用source build,点一个aggregation,那在这要聚合分类信息,那这个分类信息我们还是使用这个builders来做就行了,这个builders我们先来看分类,这个分类呢,我们主要拿两个,一个是ID,一个是名字,所以呢,我们来聚合第一个,第一个呢还是terms,按照它的ID来进行聚合,点一个我们整一个terms terms,我们来为这次聚合起一个名字,这个名字呢,就叫catallo agg,好,那就是它把这块呢拿过来catallo agg,然后呢,在这个catallo agg里边。
06:09
我们现在聚合用的属性是catalog ID,所以我们再来指定点一个field来指定catalog ID,包括呢,有多少种分类,我们可以给它下一次指定,比如我们默认只取20个,我们拿到这个聚合,这个聚合呢,是我们的catallo的聚合来把我们把这个聚合也放到source build里边,但看到log的这个聚合呢,也有子聚合,我们要看它的名字,所以我们还可以用它的子聚合点一个subreg。子聚合呢,我们还是aggregation builders,点一个来看一下这个子聚合,子聚合呢使用的是它的log name,它呢也是一个terms聚合,名字叫它把这个名字复制过来,点一个来指定一个terms,这是它的名字,然后呢再来点一个field属性,属性呢我们用的就是catallo name,我们来进行聚合,当然一个分类的ID肯定只能对应对应一个分类的名字,所以我们这个点size就可以明显的给它指定成一,那我们这个分类的聚合我们就又写好了,把分类的聚合呢,我们放到这好,分类聚合结束了以后,我们把这个分类聚合也放到了source build里边,那么所有的查询也好,高亮也好,信息也好,全都都在source build里边,那么接下来继续分类聚合完了以后呢,接下来就是属性聚合,我们要看我们查询到的所有商品,到底他们涉及了多少的属性。那么这个属性聚。
07:42
的好,我们把这个catalog我们也说了,现在叫at t ragg,好。一样,我们还是希望source build里边有一个aggregation,它里边呢能有一个属性聚合,那这个属性集合我们使用agggation builds,点一个我们来看这个属性聚合,这个聚合呢,我们用的最多的还是terms,只不过我们这个属性聚合它是一个嵌入式的这个聚合,所以我们在这需要做一个嵌入式的点一个我来看有没有N,确实有一个嵌入式的,嵌入式的聚合我们来起一个名字,这个名字呢就叫at t ragg,它的路径是at t RS好拿过来它的路径我们也从这复制过来,CTRLC。
08:27
好,我们来放到这儿,这是我们来要做的这个嵌入聚合。把这个嵌入聚合呢,比较复杂,我们接下来就在下边来定义逻辑,那嵌入聚合现在我们把这一块写好了,那接下来它里边呢,就会有一个聚合,所以我们在这个切入聚合里边,我们来再来进行聚合。首先呢,按照它的属性ID做一个我们特斯的大聚合,然后再在下边来搞两种子聚合,好我们先来放到这,好,我们现在来写我们这个聚合,嵌入式的这个聚合路径指定好了,然后呢,我们就来指定它的这个子聚合,这个子聚合呢,其实在这儿,因为我们这个嵌入的聚合,我们相当于在这儿指定好了,接下来的子聚合那就是它了,那这个聚合的名字叫什么?就叫at t RA agg,好,那么就来写上。
09:17
子聚合我们还是通过aggregation build,我们要来进行构建它点一个我们要进行terms聚合,聚合用的名字是它,然后呢,我们再来看聚合用的属性是at ts.at TD,所以我们在这来指定好点field的这是at t rs.at t,好,这是我们说的这个子聚合at tgg。这是这个子聚合,这个子聚合呢,我们相当于得到了at t rig这个agg,但在这个agg里边还有子聚合,所以相当于我们拿到的这个at t rig,我们在构建到它的子聚合里边之前,它里边呢还有子聚合。
10:01
我们就来继续ATRI,点一个sub aragation,它的这个子聚合呢,我们来看这个子聚合呢,我们现在有两个子聚合,一个叫at t r name的,一个叫at t r y6的,所以相当于我们这个at t r的这个子聚合有两个,我们来准备好两个,那第一个,第一个呢是at tr name的聚合,这个聚合呢还是terms聚合,所以呢,我们就来写上它是aggregation builders,点一个terms聚合,名字用我们这个,然后呢,属性用我们指定的这个,我们叫ATS name。而且呢,一个属性ID肯定只对应一个属性名,所以size呢,我们写成一都是没什么问题的,好把这个at tr name拿过来放到这,同时呢,我们可以给它规定SIZE1,好,这是我们第一个聚合,这是聚合找出。我们at tr name的聚合,分析出当前我们这个at trid对应的at t name对应的名字,对应的名字。
11:11
而我们上一个呢,这是聚合出我们到底有多少at trid,聚合出当前所有的at TD,相当于我们所有查询到的商品到底有多少种属性。那这个属性的ID聚合出来了,我们再来聚合出它的名字,还要聚合出这个属性对应的所有可能值,查出当前at TD对应的所有可能的取值,所有可能的属性值,属性值那就是at tr y6。我们来聚合,它这个聚合要怎么写呢?我们来看这个at tr name的这个聚合结束了,我们接下来at TL y6,它还是一个terms,所以我们接下来就直接在这个上边还用aggregation builds,点一个terms,我那terms的用聚合用的也非常多,点一个field,那现在的这个聚合,我们按照它的属性的值看它有多少种可能,所以我们来取at t r sat tr value6,但是这种属性值就多了,SS就不能写成一了,我们一个属性呢,可能我们所查到的商品涉及了多种值,所以我们size,比如我们来写一个50,那最多就这么多了,哎,那这是我们说的属性值的聚合,那最终所有的这个聚合,这两个聚合都在at trid的小聚合里边,这个小聚合。
12:37
在at t RA agg这个大聚合里边,所以我们在下边把这个小聚合放到这个大聚合,那这个大聚合呢,又在我们source build里边做了一个at tr的agg。我们这个source build里边做了这么三种,第一种是a tr的聚合,第二种是catalog的聚合,第三种是品牌的聚合,好把这几种聚合呢们都特别的重点呢,给大家放在这儿to读,我们虽然聚合完了,但是这个蓝颜色呢比较好看啊,这是聚合,我们这个叫品牌的。
13:11
信息,然后呢,接下来还有我们这个聚合,我们这个分类信息我们放在这,这是聚合我们分类的聚合catallo,还有聚合我们的这个属性信息我们也放在这,好我们做了三个聚合,走聚合我们的at tr。那么这块呢,聚合也都准备好了。同样的,我们可以来启动测试一下,看我们按照这种聚合东西我们发出去能不能得到响应结果,我们的DSL对不对,来重新启动我们这个服务,那还是用postman来发送请求,这都是我们构建的查询条件,那最终呢,按照这些查询条件,我们最终查到的商品,还有聚合分析出他们的所有结果,我们可以先来看。我们的这个查询条件在构造我们查询的这些聚合的DSL,我们来看它构建的对不对,如果对,我就应该发出去,一切都能运行正常。好,我们现在来准备好,我们来发送这个请求,来点击send。
14:16
好,请求呢,已经发出去了,我们回到控制台,我们将这个DSL语句来复制过来,我们还是复制到K里边来看能不能用。现在我们的内容又变得非常多了,我们还是来查询,我们鼓励卖啊商品服务来检索,所有现在DSL是我们声称的这个好,我们拿过来,然后呢,我们先来给它格式化走。来运行走好,现在查出的这些结果,命中的记录肯定都没什么问题的,我们就可以在这一块aggregations里边来分析它最终得到的聚合结果来看我们查到这四条记录,他们。有多少种分类情况,那么他们呢,只有一种分类,就是225,它们分类名字我们聚合出来了,都叫手机好没问题,然后呢,还有我们这个属性的信息,我们查出来的这几个商品拥有哪些属性呢?们在这个八里边,相当们按照属性ID聚合,我们有两个属性ID,一个是15,然后呢,我把这个一说,一个是我们16,我们把这两个一说,包括呢,每一个属性都有多少种取值,比如15号属性,首先来看一下是什么名字,诶它叫CPU品牌,包括呢,它有多少种取值,点开看只有一种叫海思,然后呢,我们16号属性,它的名字,它叫CPU型号值呢,也只有一种。
15:36
叫70970,那么这一块呢,检索的数据也都是正确的,它发送的这个DSL没问题,那说明我们的聚合这一块条件也都拼装好了,那至此我们的整个构建,我们请求的DSL我们就构建好了,就是这个方法,它根据我们传过来的请求参数动态的判断,构建出我们整个DSL语句查询分页高亮,包括聚合信息我们都构建好了,那构建好了以后们来到我们的service,当把这个请求都构建好了以后,我们就会调用client来进行查询,那最终呢,就会得到一个查询结果。
16:17
这是我们相当于ES给我们返回的结果,那么最终就希望要根据这个结果再封装成我们页面要用的这个检索数据,这种结果,比如我们查询到了哪些商品,当前页是什么,那么都要根据这些结果重新分析得到这些数据的。所以我们下一节课就来看我们如何来在这儿根据我们ES查询到的结果,分析得到我们页面真正的这个数据模型。
我来说两句