00:01
来,那我们继续啊,呃,那我们就把这个方法给它补出来就好了啊,这个直接创建一下这个方法啊。好,这个抄到我们这个mys u ts里面了啊,我把这个方法来拿到这个下面啊。呃,拿到。拿到这个地方吧,拿到下面写吧,好吧。诶。没复制上。好,拿到这里来写啊,行,解释一下啊,这就是什么呀,呃,查询啊。查询这个指定的什么,指定的这个这个字段啊。OK啊,行,那就查吧。那你说我要查询这个指定的这个字段了,你说这玩意儿我怎么查呀。啊。首先是不是还是先写DSL啊,对吧,所有你涉及到什么写这个ES的这个客户端操作,你就先写DSL啊,那我就盖成呗,盖的什么东西啊呃,现在我查的是日活,日活的话我们叫什么ma。
01:05
叫dau啊dau啊,就这个吧,对吧,然后呢,还是一个什么search。好,那你search的时候,嗯,如果说你直接这么去写对吧,这个查的是所有的数据,这肯定不行啊,我不要这么多啊,我只要一个什么,我只要一个mid哈。对不对,只要一个啊,那我怎么查呢?呃,我只要一个它里面的mid,那我应该这么去查哈,嗯,这里面我们应该有一个叫做,呃,我看看啊。嗯。呃,有一个叫做S。啊,有一个S就可以了啊,这个什么意思啊,这个就是告诉我啊,告诉你我要查哪个字段,比如说呢,我们就直接写这个mid就可以了,就说白了我只查你的啊来走一下。看一下他给我返回的是不是只有一个这个mid啊。对吧,你看主要是看这个结果啊,是不是只有一个mid啊mid,然后这个你看mid对吧,你看。
02:02
看到了吧,同学们。嗯,这是只有一个m midd啊,说你看我这么写就可以了,那我把这个写出来以后呢,下面我就什么把它踢出来不就好了吗。对不对,好来,那我们把这个拿过来。好放在这,然后呢,接下来我们就写代码了啊,那这个怎么写代码呀,那肯定还是什么ESC,然后做一个什么设置操作呗,对吧,做一个查的操作啊查的话呢,呃,这个还是一个search search的话,这里面需要传的是一个叫什么呀,是不是叫这个search request呀,对吧,那我给他用上一个啊search request。好,接收回来,这是我们的测试request,然后把这个东西呢给它搁进去,好,后面还是一个request option啊对,Default。对吧,好,那这个search request里面,Search request里面我们需要呃,放的这个S啊,我想想啊,这个还要S吗?这个直接嗯,啊要S的啊,要S来,那么它里面要的是一个search s build,那我们去扭上一个啊search source build。
03:07
对吧,OK,又一个啊,嗯。好。Search source build啊,OK,嗯。好这么去写啊,然后把它呢,给它搁进来行,呃,这是基本结构啊,基本结构,然后呢,我们来想啊,呃,那我这个索引名你得告诉我对吧,索引名的话,我看看传到这吧。传到这,这是可以传的是吧,那我就写个什么index name。OK吧,这那个双引名啊,行,然后接下来呢,嗯,注意啊,接下来这里面就是我们去查,那查的话呢,这里面应该就是什么,有一个search source builder点,呃,Such s build对吧,它里面应该有一个叫做S吧,我看看啊呃,叫fetch fetch s。对吧,啊,这就可以啊,就是你看啊,它里面传什么参数呢?就是你要包含哪个字段,然后呢,排除哪些字段。
04:03
对不对,那我们包含了什么,我们就包含这个,你传过来一个字段的名字叫什么叫file name,我就查他是吧,然后呢,呃,排除的话呢,我们就没有什么排除的,那什么直接闹呗。可以吧,就是查这具体字段啊,那你看啊,最后的话,我们做一个查询,然后这里面就会把这个结果给你返馈回来,好,那这个结果我们接受回来,好,这时会回来叫search response,然后了吧。OK行,呃,那你接下来就是怎么去处理结果啊,这个结果怎么处理呢?我们看一下啊,嗯。那我把结果拿过来啊,这是我们的结果啊,结果的话呢,呃,就是结这么结这么多就可以了啊,结这么多。好拿过来,然后呢,写一下啊,首先啊,我们需要什么,通过你的这个search search这个response啊,然后呢,点去get一个hit。对吧,这个hit里面啊,这个hit里面,然后呢,我们再去拿,再去拿hit对不对,然后再去2GET hit好,这是我们拿到这个所有的什么色找hit啊,然后呢,我们去迭代它啊,迭代每一个hit啊,然后就是hit.for。
05:10
好,这是我的每一个hit啊好,那我迭代它的话呢,我从它里面是不是就可以直接去掉你的这个S了呀,对吧,就是hit点什么get s。Get s。呃。S,然后S,哦,我想想啊,Get s。那我拿到SS以后还得去拿是吧?那就爱什么呀,爱这个。吧。对吧?S map啊来接着回来,好,这是我们的一个map啊,这是我的这个叫做source map,对吧,他拿到的是一个map对象啊,那我们再从它里面去拿就完事了啊,就是这个s map叫get,那我在get的时候呢,Key我们就写什么K,是不是就写我这个字段的名字呀。
06:01
对吧,这就是我那个值了啊,这个叫什么叫mid。然后对吧,好,那我把这个都处理出来以后呢,那我最终要给人家返回一个返回一个集合对不对?好那我那我现在应该给一个,应该先给一个什么呀,叫做个空集合对吧,类似B本啊,因为我得往里面去加哈。好,怎么穿,打个包啊?好好,我们这个叫什么叫这个MIS。能写吧,叫midd啊,然后呢,这里面就是什么m middsi,呃叫end啊好把这个MD呢叫加进去,行,那我把这个诶就是any rap了是吧,我看看啊有没有点盖啊。De。他返回的是一个UN rap对不对,嗯,哎呀行吧,那也也也可以啊,我们就直接什么fail的name啊,这to一下吧,就我知道你肯定是字符串啊,我就什么直接处理了,好吧,行,那我把这个m mid给它放进去啊,行,那我把这个整个for循环都执行结束以后呢,最后我就给它返回一个什么返回这个m mids点。
07:08
这个这个。这还不行是吧,它是一个。这是一个不可变的,这是一个可变的是吧,来出一下。好吧,这样就可以了,然后了吧,行,这是我们这个正常的啊,这是我们这个正常的去查什么呀,就是正常诶查询这个从ES中啊,从ES中呃,提取这个所有的这个字段,提取这个指定的字段啊好,但是这里面你在写的时候,你要注意一个事情啊,同学们,就是大家想想哈,呃,我们刚刚在写它的时候,考虑到一个问题,什么问题呢。就是你的这个mid呢,可不可这个东西能不能查出来。对吧,你想想啊,就是假如说我的第一条数据过来以后呢,我写到中了,然后呢,这个写成功了,我要往ES写了,但是我写失败了,那这个写失败有可能几种情况,就是我已经真正的写往你的ES中去写了。
08:10
对吧,但是我写失败了。还有一种就是什么,我根本就没有到达ES,我这个过程呢,我就失败了。那么这样的话会导致两种问题,第一个问题,注意啊,如果你的请求已经到达ES了,那么大概率情况下我的索引就会被创建出来,能听到吧,因为我的索引是什么,你的第一条数据到达的时候去创建的,那这个时候我是有索引的。还有一种情况就是什么我的请求呢,还根本没有到达ES的时候,我就出问题了,那这个时候我的ES中其实是没有那个索引。能理解吗?因为我们的第一条数据来了以后,我才会去创建索引,就是我们要去想那个极端的情况,那因此如果说你直接进来以后,这个地方你就贸然的去提字段,可能会有问题。可能会出现索引不存在的问题,那你就什么,因为你的索引都不存在,你要去提数据了,那你肯定提不出来的。就会报错的对吧,所以说我们要去做一个判断啊,怎么判断呢?就是呃,你要先判断啊,先判断手引是否存在啊,索引是否这个存在,这个怎么判断呢?呃,这个判断的话,我们就使用一个,它里面有个indexes啊,叫indexes点叫it,这个是判断你的手引是否存在,然后这里面我们需要传一个叫get index request啊,那我们去扭上一个get index request。
09:29
好,这是那个叫get index request啊,这里面同样啊,我们需要给上一个收音的名字啊,叫index name,好,然后呢,把他俩传进来。好,呃,这个传进来以后,还有一个叫request叫default对吧?好,这个会给你返回一个结果啊,这是那个是否存在哈,就是。能听懂吧,好,那如果说啊,你是。你是这个存在的对不对,那我们就飞一下,只要不存在,如果说你不存在,那我就根本就不需要去往后走了,你能明白吧,我就什么直接成一个空了。
10:10
理不理解?我代码就什么直接称了。啊,我根本不需要走后面的代码,我就什么直接远程空了。OK吧,那如果说你是真正存在的情况下,我才可能会往后走好,那就意味着我的这个代码呀,可能会给你返回的有几种情况,第一种情况就你是一个空的啊,就说明你的缩音不存在啊,第二种情况就是我能够正常走到下面,但是呢,我可能查不到数据。或者说我能够查到数据啊,应该有这么三种情况,好,那这三种情况我们在代码中其实都有判断啊,你看一下,如果说你不等于空的情况下,并且的话呢,你的长度是大于零的,那我才需要做状态的还原,如果说你的这个值是等于空的。对吧,或者说呢,呃,它不等于空,但是它里面是什么没有数据的,这几种情况我们都不需要做状态的还原,因为你的数据根本就没有写入到ES,没有写入到ES的时候,那我就直接什么把你的那个数据给他删掉就行了。
11:04
这样的话,你看是不是也是同步的呀,它里面没有,那你这里面你也不能有啊。对吧,它只有什么,真正有数据的情况下,那我这个时候才需要什么呀,把删掉,再把ES给他写进去。理解吧,这个我们在代码都是可以考虑到的啊行,那这个效果就有了,那有了以后呢,接下来我们就可以去做一个测试啊同学们,这个怎么测呢?呃,这个要测的话,我们再次去跑一下新的数据哈。这个DB这个就关掉了啊,把它关掉好,关掉以后我们先把这个,嗯。我看一下啊,稍等一下啊,这个方法呀,我得我得去先简单自己测一下啊,我看看这个好使不好使啊。我就自己测一下,因为我怕这个这这个地方我怕处理有问题啊,我自己测一下好吧,好,我们先把这个方法测一下吧,啊,别到时候这个有问题,那就不太好了啊,看能不能把它查出来啊嗯,那我就直接调方法了啊。
12:02
呃,现在我们直接测什么呀,测一个索引叫怎么样dau,然后呢info,呃,我们有一个1018,然后日期的话呢,我们是有一个多少来着,有一个这个。呃,三月28是吧,昨天的啊拿过来好放到这后面的话,我们就写一个midd就可以了啊行,然后呢,我们再直接去输出一下啊,看看他这个能不能,呃,正常的把数据给我查出来啊,如果能查出来,那我们再整体去测啊。哎,那这个应该没问题啊,这是我是能为什么正常查出来的,诶,但是这个怎么才这么几个呀,这几个呀,那不对呀,我看看啊。呃。这128个那样。
13:00
我这才查到几个呀。哦,你看这个问题就出来了,同学这几个呀,就一个两个三个四个五个六个七个八个九个十个,它总共给你返回了十个,但实际上啊,我这里面查的时候是128个,他没有完全给我反馈回来啊,没有完全反馈回来。这为什么呢?这是因因为这样子的啊同学们,它这个地方啊,它默认给你返回,返回十个数据。啊,但他这写的20,但这个代码中,它默认给我返回了十个,对不对啊,那比如说啊,我写上20个以后,这个地方它会给你返回20个啊下面是20个数据。能理解下面是20个数据啊呃哦,对,它是这样子的啊,就是如果你不写的情况下,它应该默认是给你显示十个吧,你查一下啊,是不是十个呀,我看看啊,这个是一个两个三个四个。五个六个。七八九十,哎,正好十个,看到没有。那就相当于我只把这个十个提出来了,我后面的东西都提不了,就他没有完全给我返回出来。对吧,那这个我们还得处理一下啊,你看我就记得有个什么事没处理啊,来这个怎么处理呢,那就什么写。
14:06
那你要写赛的话,这张写多少合适呢?那要尽可能往大了写了,对不对,比如说你要去预估一下啊,我们一天的这个日活用户有多少,比如说有5万个对吧,有5万个,那你最少得写5万这个地方。对吧,啊,那我们就我们可能也没有那么多啊,我就写个写个1万吧,写个10万吧,好不好,但是啊,你看我写个10万的话,我看看啊,诶他就会报错了,看到没有。啊,他为什么报错呢,他说你这个返回这个结果的这个窗口的太大了啊,说你这个from加S呢,你加起来呢,不能超过什么,不能超过这个1万。对吧,但其实你写了个10万。这就不行了。啊,那这个错误我们怎么解决呢?啊,这个文档中也有啊,同学们。文档中也有,就是,呃,我们在往出调数据的时候,如果说你希望尽可能多的返回结果,那你需要去调一个设置啊,嗯,调一个设置在这个位置,调一个设置啊,这个设置在这儿就是呃,我们ES呢,它有一个什么默认返回的这个数的一个限制啊,我们需要去扩大这个结果数,就是你要去改一下这个setting啊,叫什么index ma result window,把它改成这个改的足够大吧,对吧,就一定要改到你满足满意为止啊,那我把这个拿过来去执行一下。
15:21
好呃,比如说啊,你看现在我这个是有问题的吧,同学们这个是有问题的啊,有问题的,然后呢,我把它改一下,你看改一下。行,那我改了以后呢,你看我再去执行啊,再去执行他的时候走,你看这就不报错了吧,就这个10万它也是能够支持的,因为我就改了多少,我我就改了500万。能听懂吧,好呃,那么大家注意啊,这个问题我就跟你说一下,以后的话呢,其实我们可以这么去做啊,因为你既然你是一个settinging的情况下,那其实我完全完全可以怎么这么去做,这么去做,你看了哈,我把这个setting呢,是不是也可以什么直接写到你的这个模板中,比如说我们找到我们的。这是我那个什么,呃,日活那个模板对不对,那我在C里面,我完全可以再加一个东西,能不能看明白,这样的话呢,以后你在基于这个模板创建出来这个所有的索引呢,它里面都会有这么个值。
16:09
好吧,啊,把这个事给你说明白就行了啊,大家做的时候也要注意这个事儿啊,行好,那现在我们正成可以去写这个多个以后,就是我可以写这个,写这么多以后,你看我的数据就可以都可以调出来了啊,这个数据就非常多了吧。对吧,这个时候呢,我们在代码中也得去改一改了啊,代码中怎么改呀,代码中我在调数据的时候,我看看啊,点source以后我再改个size,嗯。啊,不是他啊在这啊,我直接掉也可以啊size,然后呢,呃,我就写个什么写个10万吧,对吧,这个时候我们再来去查一下啊。就刚才还是有问题,对不对,还是有问题啊。好,你看这不就查出来了吗?对吧,这种总共多少个呢?应该就差不多够了啊都查出来。OK,这样才行啊行,呃,那把这个测试一下,没问题的话,我们就整体来测啊,那我就把我的呃这个停一下啊,把什么呀,把我们这个上游呃,贝斯log骑一下。
17:11
下游,然后呢,这个APP起一下啊。呃,这个我们就尽可能测当天的数据啊,因为这句话我们有一个获取当天日期。好吧,这个事儿你要注意的啊,测当天数据啊。好,上游起了啊,然后等下游。好,下游也起了啊,来吧,接下来我们就测一下这个当天的数据了啊,这个怎么测呢?你看了哈,呃,我们现在啊,大家注意在我的red中,我这个kiss新,你看一下kiss dau dau啊。行。只有这两个对吧,接下来我要跑数据了啊同学们。跑什么数据呢?跑这个数据啊叫SH叫嗯,202杠零三杠二九对吧,今天的啊跑。
18:04
呃,那这个跑完以后呢,我们在这个。就是ES中你应该就能够看到这个今天有多少数据进来了,然后呢,对应到你的中肯定是同步的啊,如果不同步那就会那说明你现在的代码在之前处理过程中就就已经出问题了啊,就现在正常应该是同步的啊,我们看一下等他跑完的哈。已经跑完了,对不对,那这个跑完以后我们看代码啊,这个也处理完了吧。稍等一下啊,还没完啊。诶,还没完啊,马上了啊,马上了。行,这就完了啊呃,完了以后呢,你就到你的这个ES去查数据了啊,来查一下get这个怎mail,嗯,我们应该是三月29DO in for,三月29就它吧,好,Search看一下多少个啊,走这个是130个数据对不对?好,那如果不出意外的话,你的RA中现在肯定记录了130个人啊。这个有了吧。
19:00
呃,应该是130个那个mid没毛病吧。好,那接下来我们就演示一个问题,演示一个什么问题呢?你看假如说。假如说啊,我这个I的看了啊,我们又有一个mid过来了,呃。完了,我做了个什么操作呀,来不管他啊。你看啊,假如说又有个数据过来了啊,我要往省里面加了,往他里面去加。就相当于我手动加一个啊,手动加一个你看看哈,我往它那边随便加一个叫mid_一一这么多对不对?好你看啊,这个加进去了吧,同学们加进去以后你再来去查一下,它里面现在是131个数据,就是多了一个这个玩意儿,但实际上的话,你看一下啊,我的ES中啊,它现在查的时候呢,你看是不是一个还是一百三啊,就假设我们手动的模拟的这个问题啊,就是我的数据呢,写到red中了,但是最终呢,没有写到ES中啊,那假如说我的代码报错了,我代码停掉了。对不对,好,那这个时候你的状态就不一致了,因为你的RA中是131个,但是呢,我的ES中呢。
20:07
我们刚刚查了是130个。对吧,好,那接下来我们重新启动项目的时候,我们就看一下这个状态,它能不能做一个还原啊,来把它重新启一下。那你重启的时候,它首先会什么,会调用你这个还原状,还原什么状态的这个代码啊,来稍等一下。报了个什么错呀,呃,诶这么怎么。啊,这还不行哈,这个又出现这个问题了啊,为什么呢?这个问题是因为我们后创建了一个索引,它不管用哈,来大家注意啊。这个问题就是因为我们刚刚做了这个设置啊,它只对我们这个当前存在的索引管用,那这个是我后创建的索引,那我后创建的这个索引呢,它就。不管用了,你知道吧,对他不管用啊,所以我现在还得想重新执行一下他啊,执行一下他。啊,这个时候就管用了啊,所以说呢,我们还是一会儿把这个改一下啊,还是什么,在这个在你的这个模板里面把它加上比较好,这样的话,你的每个索引创建出来以后都管的啊行来吧,那么这个时候重新来执行啊。
21:09
重新执行一下。好,这就启动起来了啊来现在我们就可以去查了哈,你看一下,那我的这个ES中肯定还是还是130个,这个没问题啊,主要是看你的中了啊来刚刚是差131个吧,同学们现在你再查。一百三吧。你看那个一一那个东西还有吗?他就没有了。对吧,上次查还有,你看现在我查就没有了,说明什么,说明我的状态已经什么做了正确的还原操作。OK吧,行,那这个操作我们做完了啊,做完以后呢,最后再强调一下这个事儿啊,就是呃,因为这个操作吧,它只针对你当前已经存在的索引,如果说你后创建的索引它就不管用了,因此我们就这样来去做,刚刚我说过了哈,我们把这个操作呢,给它加到我这个模板中。
22:05
能不理解,这样的话,就是我将来只要我是基于我这个模板建了这个索引,那我都会有这么个配置,好,所以你看啊,我就把它这个执行一下,重新把这个模板建一下啊执行。成了吧,成了以后你接下来再基于这个模板创创建好的索引。这个操作就都有了。理解吧,啊,就这个配置就都有了啊,就省得你说这个每次还得什么重新去重新什么去这个设置它。好吧,啊,重新设置它啊,OK,行,呃,那就这样了啊。
我来说两句