00:01
好,我们继续往后说啊。呃,接下来啊,我们讲一下这个聚合操作啊,那这个操作的话也是我们在,呃,将来做这个数据的分析统计啊用的。非常多的啊,你做这个数据的分析,做数据统计啊,一般都是什么基于什么聚合来去做的,对吧?来我们举上两个例子啊,告诉大家这个怎么去写啊,呃,首先第一个是取出这个每个演员啊共参演了多少部电影啊,拿过来写一写啊。好聚合啊。呃,取出每个演员共参演了多少部电影。先把这个需求先看一下哈。这个如果说放到我们这个SQL里面来写的话。嗯。应该比较简单吧。每个演员共参演了多少部电影,那不就是按照你的这个演员,然后呢做一个分组对吧,分组以后呢,我们在组内的去做一个count不就求出来了吗。
01:04
是不是啊,所以说呢,呃,这个我们主要是两步操作啊,一一步是这个分组,就是我们需要什么做什么操作呢,做分组,然后呢,然后呢,做这个主内count对不对。是吧,就如果你要写搜的话,你就这么去写啊呃,但其实我们在这个ES中啊,你在写的时候呢,它也是分成两步啊,就是先分组,然后呢,再去做这个组内的一个抗的操作啊行,那我们来写一写了啊。还是get操作啊,你的查询都是get啊,还是我们的movie index。好,Index,然后后面写的是下划线search啊。OK,然后呢,后面我们就写这个具体操作了啊呃,那我们的这次查询,因为我们是涉及到了一个聚合了,聚合的时候呢,我们就不再去写这个query了啊同学们,我们写的是age JS啊,就是aggregations啊,对吧,这个是聚合的那个单词的缩写啊,叫aggregations啊,现在写的是ages啊行,我们在写的时候呢,呃,那我们首先要完成的是这个分组操作啊,所以说呢,现在我们就在写这个分组。
02:09
明白吧,然后这个名字啊,大家注意这个名字的话呢。是你自己随便去取的,就是你这个分外组以后呢啊,你可以什么给你这个分组操作的取一个名字啊,OK,那我就随便写一个吧,比如说我就叫做什么group,拜拜谁呢?拜我们的演员的名字,那就是extra extra name。好吧,我随便写个名字就行了啊,然后下面就是我们这个AG的type啊,这什么意思啊,这就是你要做分组了,那你就要做分组的话呢,你得告诉我按照哪个字段去做这个分组。对吧,那现在我们是按照你的演员的名字,那你说我再去按照演员名字去做这个分组的时候,演员的名字,目前我们这个索引中,它是存了两种方式,一种是text,就是那个盗版手影,一种是keyword,那你说我用哪个呀?肯定使用这个keyword了吧,同学们啊,那我要怎么做这个什么直短的判断对吧?那你要做直短判断的话呢,这里面我们写的就是terms啊terms这是什么?做这个指段的判断啊,行,那你要用哪个字段呢?这个字段你要写的就是action name的一个keyword。
03:12
理解吧,你得这么去写啊,行,下面这个size我们说一下啊,这个size它表示的是给你分多少个主啊,就是你可以自己去指定一下我要分多少个主。理解吧啊,那现在的话,我们演员的话可能也就没有几个啊,说这个十个主肯定是够用了啊,就你可以什么多写几个。按照这个实际的情况去写,比如说你要按照这个性别分组,那你性别来分组的话,不就两个组吗,男的和女的。对吧,啊,就看你按照什么分组了啊,你可以算一下你最终有多少个组,然后把它写到这啊,可以多写啊,也可以少写好吧。行,那这就是一个分组操作,那我们这个分完组以后啊,接下来我们是求的是什么,求的是组内的抗,就说白了,你要什么在你这个分组里面呢,去求一个抗。啊,但是现在好消息是什么呢?好消息是我们做了这个分组以后呢,这个count操作呢,是不需要我们自己去写的。
04:01
明白了吧,啊,因为这个count是会白送给你的啊,白送就是只要你做分组他就送count啊,做分组他会送count,所以说我们就什么不需要自己再去什么写这个count操作了啊行吧,那现在我们就可以什么执行一下。OK,大家来看一下啊呃,这还是我们的这个具体的结果啊,这个不看啊,主要看最后的这个。看这一部分啊,这一部分就是我们这个分组以后的结果好看一下。在这个aggregations里面啊,我们能够看到这个bucket里面,就是我们最终的最终的结果啊,那这个结果里面你看一下啊张涵予。总共参演了两部电影,然后呢,爱丽硅谷一部电影,海清一部电影,张译一部电影。那如果说你对我们的三条数据这个印象比较深的话呢,这个你应该是能够算得出来的吧。对吧,那如果说你这个印象不是很深的话,呃,我可以给你查一下是吧,查一下然后呢,你就去对比一下看看结果对不对啊,Get一个movie index,然后呢,直接设置一下错了啊好,那我先把这个结果呀,给他这个截出来啊。
05:05
放到这,然后我们再去查一下,你看一下啊,行,我们的张译。对吧,只有只演了这一部电影,所以说你看张译最后的结果就是一部电影。海清呢,也是一部电影。对吧,然后爱的硅谷呢,看一下。也是一部电影吧,但对于这个张涵予来讲啊。这是一部电影吧,对吧,然后往上啊,你看这个张涵予又一部电影吧。加起来就是两部电影。看到了吧,同学们啊,所以你看啊,这样我们就把这个分组统计,就把它这个写出出来,就就把它写完了啊。就是我们要做一个什么aggregations啊,做一个分组,然后呢,再去做一个统计,只不过这个统计的话呢,我们目前没有写啊,他会什么白送给你。好吧,啊,这比较简单啊,行,那我们再来写一个需要我们自己写的一个统计哈,呃,我们再举个例子。每个演员参演电影的平均分是,平均分是多少?
06:01
啊,每个演员参演电影的平均分是多少,并按照平均分呢?做一个排序啊做一个呃,升序排序吧,或者降序降序排序吧,啊做一个什么降序排序。好来,这是我们要去写的啊,那首先啊,你看一下,他让我们统计的是每个演员参演电影的平均分,那这一看,首先我们是不是要先做分组啊,对吧,还是先做分组,那么分完组以后呢,我们这一次呢,就不求count了啊,我们是求什么呀,求平均分,那就什么组内求什么呀,主内求什么求avg。对吧,你分好组,然后在每个组内我求一个什么avg,好,那我这个求出来avg以后呢,最后还有一个什么呀,降序排序对不对,那我这个再来一个什么,这个排序是不是啊,这就是我要去完成的功能啊来那我们就写一下吧,首先盖着,然后呢,Movie index。好,下方的search OK,呃,那这里面写什么呢?那你就先分组呗,分组的话还是我们的aggregations啊,分组的时候呢,你取个名字,比如说就叫做go,还是我们的actor name啊,这是随便写啊,随便写好,那我们这个演员的名字的话,还是一个直等判断,我们用的是这个terms啊,然后这个terms里面写的就是actor。
07:22
List name keyor还写他对吧,这是分多少个组,好,那现在我这个分组就搞定了,搞定以后呢,这一次我们不要count了,我们要的是这个avg啊,所以说呢,我们就需要在你的组内注意啊,这不是你那个分组吗?对吧,哎,这是你的分组啊,然后呢,在你这个分好组以后呢,我们要去求一个什么,求一个嗯,这个这个avg好,那这个时候呢,我们需要什么,再去写一个啊。再写一个,呃,不在这儿啊,在这写错了啊,在这里面啊,就在你这个分组里面啊,在这个括号里面啊,就相当于啊,你看这是你的分组操作,那你分完组以后呢,我们再去去写一个HJS,这个HJS写的什么呀,它就是写的是我们的。
08:05
组内的什么统计计算,比如说你是avg还是说什么sum,对吧,你要自己去写啊,OK,那这个统计的话呢,我们也需要取一个名字啊,也需要取一个名字,比如说我们现在求的是,呃,叫什么叫这个平均分是吧,那就是豆瓣扣啊。Avg对吧,就是豆瓣平均分的一个什么啊,豆瓣的这个平均分啊,好,下面就是写你这个要做的这个聚合运算啊,那我们做的肯定是一个avg的一个计算对吧。能看到吧,做的是一个avg的计算啊好,然后呢,那你要按照哪个字段去做这个avg呢?那肯定是按照我们的多半SCO来去做的,对吧,把这写到这好,就相当于我在你这个分好组以后呢,我在什么呀,按照你的豆瓣评分,求一个组内的平均值。理解了吧,啊,那么这就把这个第一件事情和这个第二事情,第二件事情就把它做完了,那最后一件事情是排序,这个排序的话,我们是按照什么,按照平均分排序的,那就说白了,我的排序的这个值呢,是在你组内求出来的。
09:12
对吧,你所排序的这个字段呢,是在你这个分组以后,在组内求出来的这个结果做了排序,所以说我们这一次的排序呢,跟我们上午讲的这个排序就不太一样了啊,我们上午讲的那个就是一个short。对吧,但是呢,我们这一次的排序呢,是你分组以后的排序,所以说呢,我们要把排序呢,写到这个地方看好了啊,写到你的分组里面,在这个地方我们要去写排序,它叫做order,它不叫short啊,它叫order。能理解吧,它叫order,好,那你这个order的时候,你是按照谁去排的呢?我们是按照我的平均值去排的,所以说你要把你求平均值取的这个名字给他拿过来,放到这个地方,就告诉他,你按照我求出来的平均值,然后帮我做一个排序啊,那你排序的话,你是降序还是升序,呃,我们是降序,那我就写成DC。
10:03
这就把它写好了。好吧,来写好以后我们执行一下啊,看看这个结果,呃,那首先啊,这个上面都是我们的这个具体的数据我们不看啊,嗯,就如果说,呃,这一会再说吧,啊来先看这个结果。结果在这啊,你看一下还是在我们这个aggregations里面啊,那么海清呢,他就演了一部电影。张译呢,也是一部电影,然后呢,这个张涵予呢,是两部电影我们看啊,海清和张译啊,他们演的都是同一部电影,那个平均分就是08:05。这没问题吧?然后这个张涵予呢,他演了两部电影啊,一部是8.5,一部是8.0,那你这个平均值不就是8.25吗。对吧,然后艾丽薇古呢,就演了一部电影,然后平均分是05:00。这个大家应该都有印象了吧,就对我们这个数据啊,你再查一下你看看啊,就是。张译海清啊,都只演了一部电影,那么这部电影的平均,这部电影的这个评分呢,就是8.5,那你的平均分不就是8.5嘛,对吧,张涵予的话,你看啊,演了一部8.5的,演了一部8.0的。
11:06
那平均分不就是8.25吗?艾利维谷的话呢,什么演了一部电影?这个豆瓣评分就是5.0,那你的平均分不就是5.0吗?对吧,而且你看一下啊,我们查出来以后,它是什么按照这个倒序排序的啊,倒序排的是不是先出现的是这个往下翻啊,往下翻先出现了8.58.5,然后呢,后面是8.255.0。好,那你正序排的也可以啊,比如说asc。对吧,正序牌也可以来找一下,这一次你再来看结果啊,结果里面就是5.0,然后呢,8.258.58.5。对吧。啊,这就是我们的这个求的这个结果啊,行,然后这里面我们这个多说一点事啊呃,大家看一下,我们最重要的呢,其实是这个结果是不是就是你这个分完值,然后呢,求完平均值以后的这个结果,我要的是它,但其实你发现了,它会把具体的数据呢,也给你查出来放到这地方了。
12:01
能不还明白,但其实对于我们目前的这个需求来讲的话呢,我是不要你的这个明细数据的。是吧,但是它默认的会是会给你什么查出来一部分明细数据的啊,就如果说你不想要这个明细数据,那你可以这么去写啊,在这个最外面啊,就这个HJS最外面,我们写一个什么,写一个size等于零就可以了,就它默认是会给你调出来这个20条数据的,就不管你要不要,我都会给你怎么查出来20条数据,但是呢,其实我是不要这个明细数据的,那你可以把这个size呢写成零啊,这个就表示什么不要明细啊,你再查,再查的时候你看一下这里面就没有明细了,它只有一个。分组以后的结果。看到了吧,啊,所以以后你在查的时候,你就看一下你要不要明细,如果要明细,那你就什么把这个呃写上要多少明细,比如说要十个,要20个啊,如果说你不要明细,你就写个零,写个零的话就不要没有明细了,就最后只有一个,嗯,要统计的这个结果。明白了吧,啊,这就是我们呃,聚合的这个运算啊,其实很简单啊,它整体就是。
13:02
两件事呗,对吧,第一件事呢,就是你的分组,第二件事就是你这个分组以后你要做什么操作。啊,这就是做一个聚合。好吧,行,呃,就说这么多啊。
我来说两句