00:00
接下来我们给大家讲一下ES的聚合搜索啊,那聚合搜索呢,有点类似于我们数据库当中的什么最大值最小值呀,包括我的数量啊,以及分组查询这种操作,那么所以呢,我们接下来给大家就分别的来演示一下,首先我们先把这些都去掉,然后呢,我们来做一个最简单的吧,我们就叫分组查询,那么分组查询的话,我们之前呢,给大家准备数据的时候,其实我们是有这个概念的,我们的年龄啊,你会发现我们的30 30,那么我们的年龄还有40 50都有,那所以我就希望对年龄进行分组,那我该怎么去做这个查询操作,那么这里其实最基本的语法还是get。我们的索引,我们的斜杠下划线,Search其实是一样的,只不过呢,我们在这里需要有一个特殊的一个操作,咱们叫做什么呢?叫做聚合,所以我们这里写上一个叫HGS,不是之前的query了点query呢可以简单的理解为一种条件,而我这里呢,是一种聚合规则,那么这个聚合规则呢,需要你起个名称,对查询的结果呢进行标记,那么我们这里呢,就写上叫age group。
01:05
所谓的就是年龄的分组嘛,然后呢,他就问你了,我们当前的这个愈合的类型是什么,因为我要分组嘛,所以我这里用一个叫terms,用关键字把它关联在一块儿,那么这里呢,我们的字段就是对年龄做操作,这个我们可以不要把它去掉。去掉以后,那这个时候有个问题,什么问题呢?我们查询之后,它会把查询的结果给它展示在最后,所以大家可以看到我们以年龄分组的话,我们前面会把所有的数据查询出来,但是我们最后会出现一个聚合的操作,那么我们之前的六条数据,我们有三种年龄,那么每一种年龄是有两条数据,所以我们这里是可以准确的来告诉你的,但是呀,看着它有点乱,所以呢,我这里点一下咱们叫size弹冒号啊。咱们这边写上它,我们叫做。哎,Size,我们给他一个零,那么这个零就是意味着我的查询没有前面的数据了,所以咱们再查一遍啊,一遍以后只剩下聚合的结果了,这样的话就比较方便了啊,所以我们会看到我们基本的操作啊。
02:06
好了,那这样的话,我们得到了分组之后,那我们接下来再往下,那如果我想对分组之后的数据再求和怎么办?比方说我们现在这个30的这个年龄啊,它的数量是二,我们的40和50呢,也都是二,我想求他们的年龄之和行不行呢?是可以的,所以呢,我们说一下咱们分组之后啊,分组之后咱们再聚合,这个聚合的功能呢,我们就是求和,对吧,我们给它求和。好了,那么我们该如何完成这个操作呢?其实也非常简单,我们就在这个分组的里面再去做聚合就可以了,所以原封不动,咱们拷贝一下。拷贝以后,在我们分组的这个里面,我们点击逗号,然后呢,我们再来写个划括号,哎,不用写画括号了,我们直接写咱们叫AGGS,这又是聚合了,而这个聚合呀,我们的名字就叫年龄的求和,叫sum,那么这个聚合的类型呢,我们就叫sum就可以了,那么叫了sum以后,你对哪一个结果做聚合呢?哎,我们写上一个age,我们对查询的age聚合。
03:09
好,那这样的话,我们分组聚合就有了点击,点击之后咱们往下看,这时候你会发现我们这个里面的年龄为30,这个组里面它的求和是60 80 100,这个应该是没有问题的啊,如果现在我们想求年龄的平均值,我们该怎么做?其实也很简单,总和你都有了,除以它的数量,那不就是平均值吗?当然了,这个不用咱们来做了,被咱们写上它,咱们叫求年龄啊平均值,那么这个平均值呢,我们写上一个get,所以名称。好,斜杠。我们的search,然后呢,这里呢,跟刚才一样,我们写上它,咱们叫AGGS,咱们的聚合,这里呢,我就叫年龄的平均值avgh,然后呢,我们的聚合类型呢,我们就选择用avg,其实就可以了,你选择我们的avg,那么这个时候选择它,那么他会问你,你对哪一个字段求它的平均值,我们就对年龄啊,那好,那我们这里点击箭头点,点击之后你会发现在咱们最后的地方,年龄的平均值就是事实。
04:14
黄道里,我们这里写上一个我们的size是吧,然后给它一个零,这样的话看的会比较简洁一些啊,我们这样的话,我们的试试就出来了啊,还是比较简单啊,诶那如果我想取前几名,这个top n的问题,其实在我们实际当中用的比较多就是前几名啊,那接下来我们就来演示一下,就是我们获取。前几名啊,前几名操作,那我现在有六条数据,我想什么取前三名吧啊,或者取前两名,这都无所谓啊,那好,我们写上get,然后索引。然后写上它,我们这个地方还是我们的聚合,然后呢,名称我们就叫top three啊,Top to啊,Top three都可以啊,那么这个聚合类型呢,我们选择我们的他回车,回车以后我们把这个地方呢,我们改一改,你不是前几名嘛,我们就前三名对吧,前三名。
05:07
前三名的话,我们去点击箭头,你会发现我们总共有六条数据,但是它其实只会把前三名给你展现出来,这个太多了,看着有点乱,所以咱们再来改一下。好了,我们点击箭头,点击箭头以后,大家看到我们现在只有0102和零三出来,对吧,前三名,哎呀,那不行啊,老师,我希望能不能排完序以后,你再给我取前三名,比方说我按照我们的年龄排序,你按照年龄排序的话,取前三名是没有问题的,但是呢,你需要在我们的这个里面来增加我们的排序,操作我们的short。这个short呢,我们就给它写上了啊来我们就叫做age,那么这个age呢,不对,我们这里应该来把这个去掉,我们再加上一下,我们写上一个age,这个age当中我们的排序方式是需要确定的,为什么?因为我们这个年龄啊,需要年龄大的放钱,对吧?哎,所以给他一个叫做降序处理,那行了,我们再来点一下点你会发现这个时候他会把50的这个年龄放在前面,然后呢取前三名。
06:11
所以啊,这就是我们比较常见的top n的问题啊,我们通过这种方式可以得到啊。好了,那么我们的聚合查询呢?我们就简单的说到这里。
我来说两句