00:00
OK啊,呃,那这个基于ID,这个很简单啊,我们就给你做一个演示啊,重点还是说一下这个条件查询和这个聚合查询啊,行,先来看这个条件查询吧,呃,那我们就deff啊,Search啊,Search什么search by这个,这个就是给条件了吧,给条件的就是什么这个filter呗,对吧,有过滤了啊行,就写个这个方法吧,那你要写的话,你就不能说这个瞎写啊,那我们就呃这个这个照着我们之前写的来吧,或者这个文档中也有啊,说这个让你查这个东西,我把它复制过来。好吧,看一下吧,赶紧查这个东西。呃,查什么呢,就是查询这个豆瓣评分呢,大于等于5.0,然后呢,关键词的话,要去搜索这个red c关键词呢,最后要什么高亮显示啊,然后呢,显示第一页每页的20条。对吧,然后呢,按照豆瓣死分,豆瓣死扣呢,作为一个什么从大到小的一个排序啊,这是我当前这个搜索的一个要求,那你要什么把这个东西呢,通过你代码给他什么体现出来。啊,这个每页显示20条太多了啊,我们就每页显示两条,因为我没有那么多数据哈。
01:06
OK吧?行,那你看到这个需求以后,你不要上来以后就写代码啊,你这个写不明白的,你先去写什么,先写DSL。好吧,来先写DSL啊,那我就把它这个拿过来,拿过来以后呢,放在这里面,我们去写那个DSL啊,嗯,注释一下啊。好,我注释一下啊,行,那我们写吧,首先啊,Get这个你从这里面查的,那就只能从我们这个movie index查了,是吧,对吧,我先这个查一下,我的三条数据应该都有啊行,这个5.0,然后呢,8.5,然后8.5。这个是8.0没问题吧,我这三条数据都有啊,这我没改过吧,应该8.0。8.5 operation red sea。好,没问题啊,我的三条数据都有啊行,那我在这个查的时候注意人家可不要这个东西啊,人家要什么呀,人家要东西比较多,首先呢。
02:03
豆瓣评分要大于5.0的关键词呢,还要去搜索这个red c,那么这两个是一个条件,你要把它写出来,这个怎么写呢?那你进来以后直接query就完事了,对吧,Query里面你因为你是符合的查询啊,这个就是有一个。范围的有一个什么过滤的,所以你要写个布尔啊,这是一个布尔,布尔里面,那我要写这个filter filter里面写什么呢?你看我当前的过滤是一个范围过滤,所以说我写个什么range,那么range里面就写按照谁过滤呢?按照你的豆瓣SCO去过滤,它要求是什么呀,大于等于5.0的,OK,那是什么GT。对吧,大于等于5.0,那我就写到这,然后了吧,其实这个查询呢,会把什么会把我的三条数据都查出来,因为我的三条数据是不是都是大于等于5.0的呀。没问题吧,好,然后这是一个条件啊,还没完,他说什么呀,你还了什么呀,通过这个关键词去搜索这个red c,那你关键词搜索red c的话,你说这个关键词你怎么写啊。啊,你不得写一个match了吗?
03:00
对吧,所以说啊,我们需要什么,在这个就是在你这个fair里面,在这个波里面啊,在这个位置你要写一个什么呀,就是master或者什么should,就看你。用哪个了,比如说我们使用这个must吧,好吧,使用这个must啊,然后这个must里面写什么呀。你master里面写的东西不就是,呃,我看看啊master。稍等啊,你ma里面写的不就是你要做什么操作吗?那我做的是一个match操作,那我就写match呗。对吧,关键词搜索什么呀,搜索这个C,那应该就是我电影的名字,电影的名字我们就叫做name。对吧,搜索red c,那我把red c写到这C,诶写到这行,这就是我最后要查的东西。呃,这个多了个逗号啊,然后呢吧,来先查一下啊,走你看一下啊,呃,评分大于5.0的啊,这个都是5.0,还有这个8.5,然后呢,关键词red c,你看啊,Red red。这没毛病吧,同学们啊,那我就两条结果了是吧,行吧,两条就两条吧。
04:02
好,然后呢,还没完啊,他说关键词呢,还有什么,还要这个做高亮的显示。这个啥玩意叫这个高亮显示呢,高亮显示那你要什么写到这个query的外面啊,Query的外面应该在这写个什么highlight对吧,Highlight里面你写什么呀。啊,就是你要哪个字段,你要做高端显示,那我肯定是我的搜索的关键词,我的name要去做高端显示了呀。对不对,就是我搜索了这个字段,这个name要去做这个高亮显示,那至于这个高亮的一个什么格式,我就不写了啊,你给我默认去写就行,好再来往后。呃,显示第一页,每页两条,那这么这个怎么写啊,这不就是一个分页吗?分页的话就是什么from显示第一页,第一页你算一下呗,我们之前讲过的啊,第一页。从哪条数据查呢?第一页就是一减一,然后呢?乘以什么乘以你的配置size是二,那不就零乘以二不就从零条开始吗?每页显示两条,显示两条怎么写啊,那不就是一个size吗?对吧?显示两条。对不对。啊最后啊,还有一个什么叫做什么,按照什么豆瓣score,然后呢,从大到小排序,你看现在我们是刚刚查过是从小到大的对不对,那我再来个从大到小排序,怎么排呢?那不就是一个short吗?对吧?按照什么,按照你的豆瓣S扣来豆瓣S扣从大到小排序D,这就写好,写好以后来整体执行一下。
05:18
好吧,看一下吧,呃,那我们现在查到的啊,这个08:05,然后呢,这个05:00。能不能看明白啊,08:05,然后这个05:00啊,因为我们这里面是呃只有两条数据啊,说你看不到那个效果,如果说我只有每页显示一条数据的话,那你应该能看到那个效果啊,你看我就现在是不是只给你显示第一条数据啊,对吧,这个是显示的operation red c,比如说呢,我要从我的第二页开始,第二页的话不就是你的呃二减一,然后呢,乘以你的每页显示几条乘以一,那不就还是个一嘛,那我就从一开始。对吧,这个从一开始,诶从一开始好,你再去查,你看这不就是那个叫红海事件了吗。是不是啊,反正就是这么个道理啊,来,那我们写个零吧。
06:01
好找一下,OK来,这就是我们写好了这个DSL,那你要什么把这个DSL呢,给他什么转化成我们具体的一个代码。明白了吧,说你这个上来以后呢,你不要直接去写代码,你写不明白的啊,你先去写这个DSL,把这个DSL写出来以后呢,再考虑转换成代码啊,那这个就比较多了啊,我看看这个能不能一一篇F显示出来啊。嗯。哎呀,妈,这这你们也看不清楚了呀,这个行吧,我多截两个图得了啊,这个太小了,要不啊,来从这开始啊。好放到这儿,然后呢,这是还来城啊,还来城后面海来城后面来把这个拿过来行看一下吧,这是我这个整体的啊,这是我这个整体的。OK,行,那接下来我们就要什么照着这个呢,去转换成这个对应的代码了啊,能理解吧,来吧,转化了啊同学们怎么转化呢。写呗,首先还是C要做什么,做一个什么,这就是一个search操作了啊同学们,这一次你做的是一个search,首先你写的是一个search search里面要传一个search request,那我就去用一个search request啊,错了啊,Request。
07:18
OK,来,Search request好,接受回来,这是我们的search request。然后呢吧,然后你就把这个东西呢,给它传进来,传进来以后呢,后面还是一个request option的一个default对吧。好,那接下来你就往后写吧,首先啊,这里面你查哪个索引啊,看看这里面能不能设置啊,这里面可以设置这个索引的名字吧,那你就把索引名字先写好啊,我们这次查的是movie index了啊。然后呢吧,好,接下来就是它里面我们要有一个query。对吧,那就写吧,你看啊,这个search request叫query,呃,叫什么叫呃。
08:00
呃,它应该叫,呃,这个还不能写啊,因为你看啊,它不仅要有query,还有别的东西,是不是它应该整体是封到了这里面的啊,它还有一个封装啊,它叫做那个S啊,明白了吧,它有个S,然后S里面的话,我们用到的是一个叫做search s build,它是整体往这里面封装的,所以说我们还得给他准备这么个玩意儿啊,来用上一个search。啊。Source build好,接收回来就是那个search source build OK,把它放过来,放到这里面行,那接下来的话就是我么从它里面做封装了啊,首先我们先封装我们这个query,那query怎么封装呢?你看了啊,Such source build,它里面是不是有这个query啊,那你query的时候,它要的是一个什么?要的是一个query build对吧?这个qua build我们分析一下应该是一个布尔的qua build对不对,所以说我们要写了啊。这个叫做query build斯啊叫叫做布尔,叫qua布尔quary好这里面的话呢,呃,这里面我们不需要穿什么东西啊,那你什么直接拿回来,这是一个什么布尔的一个什么花。
09:03
好吧,然后把它放进来。行呃,那这是你的布尔就实现了,那你布尔里面你有什么东西啊,同学们,你的布尔里面是不是有一个叫做felt,有一个什么master呀,说说你看了哈,我们的filter怎么写。那就什么布尔qua build,然后呢,有一个这个future future,它又要一个quary build,那你就写quary build s,它里面是一个叫做range的,那我们写的是range query,然后了吧,这里面你看了哈,Name name就是你要拿哪个字段去做这个range,那我们写的就是多半Co。诶来豆瓣扣啊,写一下大写的好,然后呢,你后面的操作是JT对吧,大于5.0,那就写个5.0就完事了,好接收回来,这是我的叫做range的这个que build,好那就什么直接把这个range的query build。对吧,拿过来,然后呢,把它呢,放到你这个飞车里面。
10:02
然后呢吧,放到这个标里面啊,就是这就是我的这个就封装好了,那我还有一个什么must这样,那我再去写啊呃。在这啊,这是我的什么must操作must怎么写的,那不就是还是你的这个叫做布尔的这个que build,对吧,叫什么叫must呗,它里面又要一个que build,那我就再去写query build点你看它里面写的什么呀,我们写的是一个match对不对,那就什么叫做什么match。呃,Match,嗯,Match query对吧,然后这里面传什么东西啊,传一个名字,然后传一个值呗,那名字就是我的name好,值就是你的什么叫做righta name啊,然后直就是什么,这个叫做right。然后了吧。好,这个写好以后接收回来,这就是我们的叫做match build,好,你再把这个match build放到它里面,看明白了吧。
11:02
那么到此啊,这一部分就把它写完了。你看啊,整体我们是需要有一个query query里面的话呢,我们放的是一个布尔的一个什么query build,对吧,那这个布尔的query build里面又放了你的和你的must,你看又放了我们的future和这个must,这个是都是涉及到你这个布尔里面的啊。好吧,这就把它写好了啊行,那这个写好以后,接下来你还得写的呀,还有什么东西呀,这个。先写这个分页吧,好吧,先写分页,分页怎么写呢?分页就是拿你的。叫什么search build对不对啊,Search build分页from,嗯,对吧,然后呢,Size。OK啊行吧,那现在我们直接写死了啊,我们写的是个001,那我就写个零一吧,对吧,查看第一页,然后呢,呃,每页显示一条数据啊行,再往后排序。对吧,排序排序怎么写呢?排序就是search source build,叫什么short呗,那你short的时候,你看这里面是不是要求你传一个名字呀。
12:08
对不对,传一个名字啊,那名字的话,我们就是按照这个豆瓣死扣来去排的序,那你排序的这个,呃,排序的这个什么叫做order吧,Order怎么写呢?你调一个我看看啊,呃,排序的话,这里面应该还能传一个参数吧。能不能传?呃。对吧,还能传一个是不是有一个这个short order呀,那我们再来写一个什么叫做short order short order,他这个他也是个枚举啊,枚举里面的应该就是这个DC呗,DDC对吧,这个写好了啊。好吧,这是我们一个short啊,好,那最后还差一个这个highlight啊,那我们把这个highlight给他怎么搞一下啊,这是那个高亮,高亮的话还是一样的啊search source build讲什么叫做highlight,那么它里面要求传一个什么叫做highlight build啊,这个这个就不是qua了,所以你要去new一下这个highlight,嗯。
13:03
Build啊,你要去new了啊,好扭出来就是那个highlight build,然后这个highlight build里面我们要指定一下你的字段哈,说这个highlight build讲这个叫做felt,你要哪个字段做高亮,那我是我的name做高亮,对吧?最后呢,把这个highlight build呢,放在它里面行,高亮也就搞完了。那我们整体的话,就把所有的东西呢,全部都封装到了一个叫做呃,Search source build里面,然后呢,再把它呢,放到我的这个search request里面,最后呢,我去做一个整体的执行。对吧,那最后的话呢,我们就会拿到结果啊,结果呢还是一个search response。这就是我的结果,好,那你拿到结果以后呢,接下来这个结果的一个封装,那你过来拿,拿过来看看啊,就是相当于你把这个执行一下啊,你这个执行完成以后呢,这就是我的结果了,那对于这个结果的话呢,我们重点关心的就是这么几个啊。这个总共的条数有多少,因为你将来要做分页,你做分页的话,你就得告诉我总条数,你告诉我总条数以后,我才能够给你算你总共有多少页,比如说你在这个页面中展示的时候,你总共要展示多少个页,让用户可以点对吧,所以这个我们要去获取的啊,再要获取的就是你这个当前的这个数据了呗。
14:09
对吧,来,所以说我们就把这个拿过来啊,这个是,呃,我先把它截个图啊。好,然后在它下面我们还有一个这个hit啊。对吧,还有个这这他下面的啊,它下面的啊,然后这后还有个shot,这个shot的话,我们就呃这个这个就不就不拿了啊,这就不拿了,好看一下吧,那我就获取了啊,首先我们要怎么获取这个总条数啊总条数。对吧,怎么获取总条数,那什么search response,注意啊,总条数在谁里面,总条数在这个hit里面的,说你叫什么直接什么get hit,在这个hit里面我们有一个total,你在什么get total。对吧,Get,呃,它叫做total hit啊,Get total hit OK,然后它里面的话,我们就有一个value来点value就可以了啊,点value OK,这就拿到我的总条数了啊,这是我的total,呃,叫什么total,嗯,Total hit吧,嗯,Total hit啊,Total data吧,好吧。
15:10
道斯吧,OK吧,就是我有总我有总共有多少条条啊,总共多少条数据啊,OK,行,那这个总条数拿到以后,接下来就是拿我们这个明细了啊,就是明细明细啊,你的明细数据你要拿出来,这就是我的明细数据啊,那这个怎么拿呢?在我的hit下面,我还有一个hit对吧?所以说我们叫什么?就是search response,讲get hit,然后呢,再去改get hit,你看就hit下面还有个hit对不对?好,这个拿出来以后呢,应该是多条数据才对啊,所以他给我返回的是一个search hit啊,这是一个什么数组,因为什么呢?当前我是每页显示一条,如果说我每页显示两条的话,那这里面应该封装就是多条数据了。对吧,所以说你要把它什么当成这个多条数据来处理啊,OK,那你拿到这个每一个以后呢,你这个hit,这样这个做一个for啊,做一个迭代,迭代的时候你拿到每一个hit啊,每一个hit,然后呢,这个hit里面你就可以拿东西了啊,你看它每一个hit里面是不是都包含了我们的这么多东西啊,S里面不就是我的数据嘛,对吧,所以你看了哈,我先拿数据啊,这是我的数据,就是hit加什么get source。
16:17
那我就什么直接按string就完事了啊,就把它作为一个什么JA来去处理了啊,这是我的呃,Data,嗯,JA吧,对吧,这是我的数据啊,那除了数据之外,你还有什么东西啊,同学们,我们还做了什么,我们还做了高亮。对吧,那你要把高亮也提取出来啊,提取高亮这个怎么提取高亮呢?就是hit点什么get highlight field对吧,这候的还来成fail啊,然后呢,他给你返回的是一个map啊,为什么是一个map呢?因为我们目前的高量呢,是一个,但是我们将来很有可能会什么多个字段呢,都要什么去做这个高量,所以说他给你传返回来一个map,那你要从它里面去提哈,就是fair尔这讲什么get get的时候呢,把你要提的,我们是不是就要内呀,同学们,我们是这个字段啊,把你这个字段提过来,那么提出来以后呢,它是一个叫做hit highlight felt。
17:09
看到了吧,然后现在的话,你就把这个东西整体给它提出来了,但是你提出来以后呢,你还得把这个值提出来,对吧?所以怎么提呢?你看一下啊,叫highlight field,点它有一个什么get叫fragment啊,是这个方法,这个方法就可以把这个提出来啊,但是呢,它给你返回的呀,还是一个数组,你知道吧。为什么是一个数组呢?你看一下这个中括号不就是一个数组吗?但实际上我们明白啊,它里面只有一个值对不对?所以说我们可以这么去做啊,直接什么呀,直接这个ments。嗯,然后呢,这个写个零对吧,把它提出来就完事了啊,这就是我的那个,呃,它返回的是一个T对吧,这个不太好用啊,我们直接什么呀,点出string啊,这就是我那个叫什么叫highlight的什么值啊。还来讲啊,它的一个支。
18:01
然后了吧,好,那我拿到这个值以后呢,接下来。我就可以什么想办法去做封装了,比如说啊呃,你正常的话呢,这是你查到的结果,但其实的话呢,我们将来最终的结果呢,我们在页面中展示的时候呢,我是要把这个东西呢,把它替换掉的,因为我不用它了,你用它的话,它就没有高亮,这是我处理过高亮以后的,我要把它什么展示到页面中,说正常,如果你要给这个前端返回的话呢,你不能直接把这个返回,你为什么你得把这个高亮的给他什么替换到,替换到你这个里面,然后再去做返回的。明白了吧,啊,当然现在我就不替换了哈,我就把这个打印出来,你看一下就得了啊来data session讲什么呀,这个set up输出一下啊,这是我的数据啊,这是明细数据啊,好加上他,然后呢,呃,再打一下什么呀,再打一下他的这个高亮啊,就是高亮OK,加上这个叫highlight value就可以。看到了吧。行,那最终呢,把它处理好来,处理好以后呢,我们就跑一下啊叫search by。
19:05
拿到最上面。找一下。好,看一下吧。这就是我查出来的结果啊,明细数据你看啊,ID对吧,名字豆瓣评分后面是我的演员列表。然后你看这个高亮,高亮不就是你看operation red c,然后呢,因为我们搜索的时候,我们是搜索了什么呀,我们搜索了这个red c对吧,这是一个分次匹配,那我既然能够匹配到,我就会把你的red和这个C的两边呢,给它什么加上这个标签,将来什么是可以什么做高亮的,就我刚才意思是什么,你要正常要把这个东西呢给它,把这个值给它替换掉,就把它替换了,这个我不要了,我要的是最后是这个结果。明白吧,那怎么替换呢?其实也很好替换啊,你刚刚拿这个结果的时候,你你先别给他直接拿成一个什么呀,别给他拿成一个字符串,你可以拿成一个这个东西hit这样什么get成什么get,这个source as map,你现在拿成一个map,那你拿成一个map以后的话,这就是一个整个就是一个map,那我map里面我就我就可通过什么这个key,然后呢,重新给它赋值。
20:11
理解吧,啊,最后的话,你再把这个整个map呢,转换成一个什么JA啊就可以了,好吧,说这个操作很简单啊,或者说呢,我既然拿成一个麦,拿成一个字符串也可以,那我到了这个地方以后呢,我可以什么再把那个字符串转成一个什么摘生,转成摘神以后,我也可以去操作这个字段的呀。对吧,啊,这就看你想怎么写了啊,这个就呃都可以OK吧,行,这就是我们的,呃叫什么呀,叫这个条件查询。好吧,我们尽可能把这个讲过的东西都给你写一遍啊,都给你用上了啊,行,听一下。
我来说两句