00:00
短期因为咱们现在整体是不是已经把这个总数它的处理已经完事了呀,但接下来咱们现在呢,原来看一个分时数这块东西怎么来处理,对吧?那么按照咱们原来的思路,按照我的开发步骤,那么首先第一件事,咱们先是不是得到service里边是不是提供一个我们的方法呀,对吧?那比如说咱们现在呢,上面是查询某天的日活数,现在呢,是查询啊某天啊某天,然后呢,每个时段啊,每个时段或者某时段吧,某时段啊某时段它的一个什么呢?它的一个入果数吧,对吧,因为不是总入合数了,对吧,咱们现在什么,现在是某个时段的这个入化数,那么如果说你要想去做这个事的话,那咱们现在提供一个我定方法对吧?这个发生返回值呢,现在待定,然后记下来get的Du,这个呢是50R对吧,就是说现在呢,这是每个小时的对吧,这应个数,那本身你这里是它的。
01:00
我把这个日期出来传过来,因为咱们现在是某天嘛,到底是哪天,那这会儿呢,那你肯定对吧,得给我处理一下,把这日期给我传过来,返回手工的同学们。返回什么,你说我现在想,哎,你今天是10月24号对吧,那么你每一点段,你这个这个三点你的任务是是多少,四点任务是多少,五点任务是多少,你说我返回的是什么。啊,我反回的什么集合什么集合,因为我这集合是对的同学们对吧,我这里这个集合里面是不是包含两部内容,一个是小时,那么另外成当前这个小时是不是它的一个这个活跃设备数量对吧?所以说咱们现在这里应该是一个MB集合,Ma集合呢,K应该是S串是三小时啊,然后咱们这个Y流是不是其成我们这个活跃数了,对吧?所以说呢,那应该返回一个这样的mab集合啊,把这MB集合好,那这样的话,你现在在咱service里边添加了一个这样的方法啊,添加这方法那。
02:07
再往下对吧?那么咱们是不是得对这个方法来做一个实现,对吧?那么怎么去实现呢?那来到我们现在它的实现内中,然后呢,请添加没有实现的方法啊,把没有实现方法先添加一下,那么最终这个方法呢,要返回一个map集合,对吧?那么在返回之前呢,别着急对吧,干什么呢?先来这对吧,因为你这里是不是操作我们这个elect search,要从elect search里边出来获取数据了呀,对吧?所以说呢,你现在别着急写代码,我现在啊我啊让你在咱们这里边把当天咱们24号那天对吧?然后呢,每一个小时它的一个我们这个这这个活跃数的活跃设备数我统计出来,这块应该怎么去实现。
03:05
来想一想,这个东西应该怎么来,怎么来实现啊,每一个小时啊,然后呢,它的活跃数是多少,这东西怎么能实现呀,想一想你看咱们现在在在我这个以来算这一页每个小时是不是有一个H2了,对吧?假如说我现在这这里边这这这是11点呢,有一个咱们这个记录,这11点又有记录,十一点一共都记录怎么算,同学们是不是可以按照咱们当前那个小时做一个分组,分组之后咱们去看的时候就可以了,对吧?那如果想做这个事的话,咱们现在这块分组怎么写的呢?啊,是不是直接有一个AGS呀,对吧?来那么这个是个什么,做咱们的分组,然后接下来这个是不是给你当前这个分组啊取个名字呀,比如说格BY按照什么,按照HR来进行分组,然后接下来,那么分组类型是什么,这个才是。
04:06
你们所说的term对吧,Term对吧,那咱们现在在这里,是不是现在我要分组啊,对吧,我聚合的类型是分组,按照谁来进行我们的分组呢?是不是A是啥呀,对吧?然后接下来这个展示多少条数据出来呢。二四,哎,24对吧,你想想一天的再再多也多不出来了吧,对吧,所以说咱们现在呢,把这个size给拿过来,24条啊,写了24条数据,那完事了呗,那咱们现在来看一看,那么执行一共50条啊,咱们现在应该都在一个小时,那咱们来看一看,对吧,来往下走,往下走,往下走,这里是不是咱们聚合的结果呀,对吧,那么最终它有一个叫bucket在咱们这里边有一个11点。然后接下来这里有什么是咱们这个数量吧,比咱们今天啊,就11点的时候,我们生成一些数据,对多少呢?50条啊,就11点时候生业数据50条对吧?好了,那么到目前为止这块我这个写这个查询啊,能不能跟上。
05:10
没问题吧,那接下来,那如果这块没问题的话,那我就需要干什么呢?我就需要把它当前这块这个查询是不是给翻成我们现在这个账号代码的呀,对吧?来到我们现在呢这里边,然后接下来那么你对吧要去写我们这个的这个账号代码,对吧?那其实呢,就是把它这个查询呢,给它翻译成代码,这样就OK了,对吧,那来呗啊吧,那首先第一件事,你要操作我们这个S,咱们是不是得有这个je客户端呀,这个je客户端是不是人家这个论都帮你集成的呀,你直接拿过来用处就可以,对吧,直接去调它里有什么方法呢?应该有个叫is cut这样的方法,对吧?然后接下来那么咱们现在干什么操作不还是查询呀,所以说既然还是查询,那这里你有一个search呗,然后进下来点我们这个builder对吧,哎,点builder,然后接下来这里边需要把这个查询的对吧,这个语句给我拿过来。
06:10
直接可以简单点,直接把这些东西拿过去,但是我们说在账号代码里,我们尽量不嵌套这样的东西,对吧?然后接下来,那么咱们这里呢,先build一下,然后VAR拿到这一个search,然后将咱们的search是吧给它放在这里,然后对异常做一个处理,啊在这里非异常做个处理,然后接下来在这呢,我自己抛出异常中你有一个run time exception什么呢?如果发了异常了对吧?那么这块呢,咱们对吧在这告诉他ES查询异常对吧?其实如果说你要自己这样处理的话,这会你可以不用。对吧,这个你可以不用,你加这块的目的是什么呀?加这块的目的是不是其实就相当于把咱们异常的堆栈信息给打印出来了啊,更详细一些对吧,更详一些对吧?好了,那咱们现在呢,大概的这个架子是这样,然后接下来那你在咱们这里边,在查询的时候,这里少东西吧,同学们我是不是得对吧?在查询之前是不是得a DD index你是什么index名字给我对吧?那么你查询的时候index名字是谁呢?咱们在这呢,这咱在这呢,所以说啊,那我首先在咱们查询的时候,那我应该呢,定义一个变量叫index name,它等于我们现在呢这个内容对吧?只不过这个东西呢,不能写死对吧?那应该是双引号,中间加两个加号,把date放过来对吧?然后接下来在咱们的I的index里边,包括index的名字给它加进来啊,把index名字给加进来。
07:38
对,然后接下来,那么咱们这里是不是开始构建我们现始query了呀的这个query交谁去构建,有一个叫这个什么叫search source builder吧,所以说咱们现在又一个search,然后source builder,又一个such source builder,然后接下来为啊这个呢是我们source builder对吧?那么通过谁咱们现在在这里定义一个变量query,它就等于我们这个source builder.co string是不是可以把咱们当前这个query啊,把这个查询语句给你转成字串啊,对吧,但是这里边有东西啊,那这里面是不是有东西,咱们现在是不是得把这个东西对吧,给它搞定一下对吧,那这块按照咱们前面的变成的一个套路对吧?那这里该怎么写了,South build对吧?然后呢,点点谁是宽RY吗?好像不是宽RY是不是因为咱们原来query对吧,那大家诶这个组路不错啊,不找query那就挺好,是不是找agg开始的呀,对吧。
08:38
那看一看像哪个呢?这第一个是不是就挺好,是第一个是不是就挺好的,对吧,你看A做聚合操作嘛,对,然后接下来那么你需要传一个什么呢?是不是得传一个叫builder了,对吧,那咱们现在application builder没有怎么办,你是吧,来你拗一个谁呢。
09:01
I will get a build。也也试一试是吧,你有一个咱们现在reg。Build,然后你看一看像哪个,你有一个还build好这里有一个terms是吧,那就来你有一个terms,然后接下来这个terms需要传一个参数什么东西,String name对不对,这string name你觉得我应该写谁。是不是咱们现在这个东西CTRLC拿过来对吧,CTRLC拿过来,然后接下来,那么咱们现在呢,在这里除了它之外还有一个什么呢?还有一个叫value type,对value type,那你看value type这里面有好多这个类型,你本身是不是做分组啊,分组之后咱们是默认去count count之后它的值是什么类型啊,Long类型是吧?来来这个呗。对吧,扭了一个他是吧,拗了一个他,然后接下来那么咱现在呢,在他这里,因为我一不小心点了一下。发现对吧,有些东西出来了,你们你你们也会这么不小心吧,啊也会是吧,所以说就是瞎点了,等程序是怎么写出来的,对,程序是瞎点点出来的,那咱们接下来你看这个东西基本上思路属于出来的,我现在再往下走,大家看是不是开始指定这个东西了,对吧?Fair还有什么size,你看这里边fair size是不是都有啊,所以说呢,那咱们在这里fair的谁呢?HR按照咱们当前的字段进行分组,然后显示多少条数据,对来接下来在这里四,24条,多少20条,然后我们现在呢,四点拿到的是什么?拿到的是termg build对吧,在这啊拿到了一个这个内容,然后接下来你是不是应该把咱们当前这个term and放到咱们这个里面来呀,对吧,这个呢是一种方式。
10:55
对吧,这是我不小心昨天下点点出来的一种方式,对吧?除了这种方式之外呢,好像还有另外一种方式啊,在这里看一看他。
11:08
然后呢,咱们那个aggregation builder对吧,Term build,那这里边呢,应该有一个对吧,呃,Al build是吧,对吧,现在这里面应该有一个什么方法,就是什么呢?还有一种方式就是就是我在讲义里拿列那种方式,然我看讲义里边这种方式和我现在就不太一样啊,不太一样,呃,找到它对吧,然后接下来看到咱们那个讲义里边,这个讲义里边它是怎么做的呢?对吧,咱们再去查询的时候,对吧,那它这里边有一个什么叫啊,叫aggreg builders对吧,在这里对吧,它的有个叫aggreg builders,然后接下来这里面有一个什么呀,叫curs。对吧,这方法,然后接下来这里又放谁,这里放它啊,这里放它,然后接下来再到们这里,再往后也是有什么size,然后也有什么呢,也有咱们这个fair的对吧,也有fair的对吧,那么它啊也这也有fair的对吧,然后现在在咱们这里边,你再去这个返回的时候,它返回也是一个这样的类型的数据,那这两种方式呢,都行,其实都是干什么,都是创建一个term aggg build啊这两个方式呢,都行啊,这样只是创业方式呢,稍微有些变化,但无非呢,咱们指定的内容都是一样的啊,然后接下来,那么咱们现在呢,把这个把这个。
12:25
给他的这个多这个指定好了,这个指定好了,然后接下来咱们现在呢,来把它放到我们这个source build里面来帮他构建一下我们这个查询语句,然后转换成我们这个字串,然后放到这里来查询,对吧?那么其实我现在查询完之后,同学们,我最终啊,我要返回东西是什么,是不是一个这个东西啊,对吧,那你现在这里得定一个对吧,这时候呢,这个是我们的our麦,它就等于new一个哈,Ma现在是不是还没有给你返回呀,你现在要把到那2MA呀给返回回去,对吧?但是现在这里没数据呢,怎么办?你是不是得对我查询结果做一个助理啊。
13:03
对吧,你要对我一个这个查询结果来做一个处理,那么怎么来处理咱们查询结果呢?那咱们现在的思路同学们,我只是用XQ的,你是不是得定义变量来接受我现在判询这个结果,对吧?来点VR拿到什么呢?拿到我们现在result,那接下来那么拿到result之后,那么再往下在这里啊看看看它啊,看它你是不是想过去摊。对吧,那么这块呢,你得点一点了对吧,就是我现在啊,拿到这个东西之后,那我肯定想获取它,然后这里面找谁呢?根据这个名字来找咱们这个bucket吧,对吧,那么这里怎么样去找到咱们现在这个值的对吧?那你的点啊同学们到你们下点的时候,是不是来result点啊点看一看,看看谁。Obgations是吧,来,那么接下来那么get allgations,那么拿到的是什么呢?那么我看到,诶拿到是一个什么OB好像呢,和我还不太一样,我想要bucket呀,你看我这里,我说想要bucket呀,它不太一样,然后接下来再点点谁。
14:15
来看一看,我现在在点该点谁了。你想我现在想拿到聚合这个操作,那么具体是哪个聚合操作你知道吗?具体是什么聚合操作你知道吗?我是不知道吗?有可能同学们,我在咱们当前这个返回里边,我做了多个聚合操作呢,这里有什么分组的,还可能有别的对吧?你光把它拿到了,但是我现在是不是想用这个分组的聚操作呀,所以说呢,那咱们现在分组是什么?那点刚才咱们看到了是不是有叫terms obggg,我是不是想把咱们这个分组聚合的操作给拿到,对吧?那么根据什么去把这个分组聚合操作拿到的,这里不是有名字吗?你聚合的名字叫什么,是不是在咱们上面指定了呀,叫grow by对吧?HR,对,然后接下来那么你拿到这个之后,点V看一下这什么,大家看可以拿到一个分组聚合操作了吗?对吧,但是现在这个东西是我最终的效果吗?那也不是。
15:11
也不是对吧,你想要谁,我想要的是这个下面不有一个什么八嘛,对吧,Bar里面放的才是我们现在哪一个时间哪个小时,它的一个我们现在它的一个日活数嘛,对吧,所以说呢,咱们还得再往下点点什么呢。看一看是不是来了,咱们现在这个get buck呀,对吧,但注意啊同学们,那么咱们现在再去做这个操作的时候,那么到这呢,你得先停一下对吧,点我VR对吧,我定义一个变量来接受一下,比如说这个呢是T。啊A吧,或者叫什么呢?T terms,然后ADD对吧,你现在呢,先停一下,为什么停一下呢?同学们有没有可能我现在啊在咱们这里啊,我呢啊这个没没有获取到咱们相关的一个信息啊,没有咱们这个发,比如说我现在今天一天我啥也没点,那咱们这个时候,那有可能我当前跟这些东西或者没获取到嘛,等我有可没获取到嘛,那为了提高你成的健壮性,那么在在这块把它单独拿出来干什么呢?给做一个判断,如果说我当前的这个东西,它不等于空说明什么,说明我现在从你的探究语句里边,是不是把咱们当前这个分组聚合操作给它获取到了,那么获取到之后你在干什么呢?你再去把来去调它的一个get的发的方法。
16:35
对吧?那么它的返回值对吧?是一个例子集合,这里面放的是对吧?那一看例子的集合里面放的是咱们当前term aggregation的一个内部类叫entry,这个entry大家应该不陌生,虽然说你们没见过这个类的一个内部类叫ENT,但是你们在我的map里边,你们是不是接触过呀,这个安例是什么?是不是对我们的K和value它的一个封装啊,对吧?对建筑的一个封装啊,那也就是说咱们现在在这里它得到的结果是哪个小时,它的一个我们的一个日活数是多少,是不是一个key,一个video,一个key一个video,对吧?所以说呢,咱们现在这里边,它其实也是把我们的K和video封装的一个安全地方去了,对吧?但是我一天有24个小时的呀,对吧?那么咱们现在是不是得对我当前粒子集合来进行便利啊,来CTRLCCTRLV点我们现在什么的放循环对吧?那每次遍历得到的是一个bucket,然后接下来bucket,它里边应该有方法,就我现在不点你们就应该有。
17:36
方法这两这个方法在哪呢?一个获取K的是不是一个获取WY轴的对吧?那接下来点大家看get k和咱们想的一样了,对吧?然后接下来这是什么呢?咱们现在K达到了,那么除了K之外呢,那还有什么来第二,然后还有吗。Get的对吧,然后呢,咱们现在有一个什么呀,你看它这个值叫什么do抗对不对?来那咱现在呢,来在这里get的抗的是不还有获取咱们的数量呀,对吧?所以说咱们现在把这两个东西可以通过get k和get count来获取,对吧,获取到之后咱们可以把它封装到哪的是封装的map集合正确,你上面数最重要给你返回啊,每一个小时它对应的一个逻数是多少,咱们可以直接往这里面放,怎么放呢?叫put的方法,一个是buck.get key对吧,那么另外一个是我们这bucket get count对吧,然后接下来对吧,把这个一结束。
18:36
那这样的话们当前这个小时对的就完事了,就完了,来看一看同学们对吧,那这个呢,是关于啊,我在咱们那个service里边对吧,咱们这个service里边,然后根据咱们这个日期对吧,来获取当天的每一个小时对吧,它的一个我们这个日活数对吧,是多少对吧?大家看我们现在我在写代码的时候,我没从头往下写,一行行写的对吧?你看我在写代码的时候,其实这个从哪开始的,从。
19:15
从从从从从从这开始的,从这开始的咱们代码对吧,没有什么规律,是不是咱们现在应该是个思路了对吧?我现在干什么,我现在想去执行我们这个search,但是我发现需要search怎么办?我是不是构建search呀,但search需要query query怎么办?我是不是构建query啊,对吧?就是我在写代码时,我是需要什么,然后呢,我去把这些东西给答出来,我希望大家晚上练习的时候也这样,对吧,尽量避免说,哎,我现老师有这些方法,然后接下来外集合对吧?那接下来search,你这么写的话呢,就是思路就没了,对吧,思路就没了。好了,这是关于我们现在这个STEM,它的一个处理,稍微停。
我来说两句