00:01
好,我们继续往后说啊。呃,刚才我们提出两个问题啊,我说这个大家这个下课的时候思考一下啊,这个。能想出来解决方案吗?啊。呃,一起来说吧,好吧,呃,哪两个问题呢?我们再来说一下啊,这个第一个问题是,呃。叫什么呀,叫这个就是谁去见索引这个事儿对吧。就你这个每天你要你做了分割索引了啊,那假设说我们每一天呢,都会什么做这个索引的分割,那我每一天都要建一个索引,那谁帮你去建这个索引。是不是啊,然后呢,第二个问题就是你做了分割索引以后呢,你把数据呢,存到了这个不同的索引中了,那如果说我想去查一个。大周期的数据,比如说一个月的数据,或者一个季度的。或者半年的数据。那这个时候你要什么从很多个索引中去查数据,那你应该怎么去查对吧?哎,这两个问题啊,来,那我们把这两个问题呢去解决一下啊呃,我们先来解决,嗯,先来解决这个第二个问题吧,好吧,先来解决第二个问题啊,其实这个问题呢,很好解决啊,同学们很好解决。
01:14
这个ES呢,帮我们提供了一种,呃,提供了一个东西啊,这个东西呢,就可以帮助我们去解决了啊,它叫什么,它叫这个说银的别名,我们可以什么通过这个索引的别名,然后呢,帮助我们去解决从这个多个索引中查数据这个事情。好,一起来看啊。呃,这个所以的别名呢,他说就像一个什么快捷方式啊,或者什么软链接啊,可以指向一个或多个索引。啊,也可以给任何一个需要索引名的这个API来去使用别名,带给我们极大的灵活性。啊,允许我们做如下的这些操作,哪些操作呢?比如说给多个索引分组啊,那应该这个就是我们目前迫切需要的一个技术啊,还有什么呀,给索引创建一个子集视图啊,还有什么呀,就是可以在运行的集群中呢,做一个什么索引的什么无缝切换。
02:05
好,我们就来挨个分析一下啊,首先啊,第一个功能呢,就是我们现在目前所需要的,你看啊。我们不是把索引分割成这个很多个索引了吗?对吧,每一天一个索引,好,那将来我们想去查数据的话呢,你正常查你的什么,把每个索引的都调出来,然后查一遍。那就会很麻烦,你要查一年的数据,那你要怎么查365个索引,你写代码你就写写写多少呀。对吧,好,那这个时候我们可以怎么通过所有的别名来去做啊,因为别名啊,别名就是给你起个外号啊,给你起个什么,起个这个呃,这个这个绰号对吧,外号,然后呢,一个别名是可以什么指向一个或者什么多个索引的,那你看我可以会这么考虑啊,我起一个别名,让这个别名的指向你所有的这个索引。对吧。将来如果说我想去查你的数据的时候,OK,那我就什么可以什么从什么从这个别名中,然后呢,直接去查,就是我查别名,就表示我在查所有的。
03:03
这不就解决了吗?对吧,啊说这个事情其实很很好解决的啊,行看一下吧,他说的就是你分割索引呢,解决了什么这个数据变更的场景啊,然后呢,也解决了这个就是数据什么查询范围的场景,但是你这个分割的比较频繁,如果说想要统计一个大周期的这个数据。你的数据是分散到不同的索引中的,统计就会比较麻烦,那我们可以什么把这个分割的索引呢?取一个什么相同的别名,这样我们在统计的时候呢,直接指定别名就可以啊。能听懂吗?同学们,这是我们可以做的第一件事情啊,行,那我们就边说边来给大家去演示这个效果啊,呃,这个怎么演示呢?那我们就过来。啊,过来啊,比如说我们现在,呃。先搞两个索引吧,好,索引明明啊,OK,呃,那我就简单一点哈,简单一点,我下面有有有举过这个例子啊,嗯。
04:02
见表示声明啊,我看看啊。嗯,简单一点啊,对,这都是那个index是吧?嗯。我自己写一个得了,好吧,我自己写一个吧,来我们自己来测试一下啊,自己测一下吧,嗯,我们叫这是什么,这是那个。呃。双引冰冰,那我就直接使用这两个吧,我就不想写了,直接使用这两个吧,你看了啊。现在我有两个索引啊,就是大家大家这么去理解啊,就有一个叫做get movie index,这是一个啊,呃,我就不用再去写新的了,直接用这个现成的吧,好吧,Movie OK啊,假设啊,同学们,假设这是我这个分割的索引。明白就是我按照这个,比如说按照按照天吧,这个分割的索引了哈,这是我分割出来的索引,比如说这是某一天的,这是某一天的数据啊嗯,来这里面你看我们有这个三条数据,这里面有这个三条数据对吧,这里面都是英文的,这里面都是中文的啊这个这两个是我们一直在用的这个索引啊OK,行,那假如说呢,现在哈,我们就想说。
05:16
干嘛呢,想去统计一个大周期的,这个大周期的一个什么数据,那假设啊,我们这个数据呢,都存放到这两个索引中了。OK吧啊,我们现在是两个啊,你要去想象很多的情况哈,很多的情况。好,那这个时候我们可以怎么查呢?啊,你可以这么去查,你可以一个一个去查,查出来以后呢,你想办法把数据给它拼接到一起。当然这个事儿我们肯定是不会这么做啊,这个很麻烦,那我们要做的操作就是什么,我们可以给他们建别名,我给你们建一个别名,然后呢,将来我在查的时候,我就什么直接查病名就可以了啊,说你看了哈,我们可以这么去做,就是给给什么呀,给这个现有的索引区别名啊,就是鉴鉴别名啊曲别名吧,好这个怎么操作呢?我们得把这个语法拿过来啊。
06:03
好看一下他这么操作的就是。呃,Put一个Alex就是悲鸣的意思啊,然后下面是你的动作,这个动作的话呢,你是你是做加的操作还是做这个。再长一点啊,来看一下,就你是加别名还是要干什么啊,我们可以加别名,当然也可以什么删别名啊,有这个。对吧,可以,这个山明明的啊,一会儿再来说。好,你看啊,现在就是我要干嘛呢,我要给我的这个movie index,就是我的这个索引,我要给他加上一个别名,好,假如说这个别名我就叫就叫这个movie index,然后2021吧,那行吧,这是我取好的别名啊。你随便写啊,别名随便写,你想叫什么名字就叫什么名字啊,OK,行,然后呢,我同样啊,我要给谁啊,我要给我的。找movie index,然后呢,下滑下CEO,我也给他这个别名。能明白啊,我也给他加个别名啊,那这个别名的话呢,我也叫这个名字,因为你们你们两个按照我们这个业务规划来讲的话,都是属于什么同一个业务的,只不过呢,我是做了索引分割了,对吧,分割到什么不同的索引中了,好那现在我希望什么同时去查你们的数据,好那我为什么给他们建这个相同的别名?
07:13
那行吧,来把这个执行一下啊,执行好,这个执行一下,执行OK,那我们这个有了以后,接下来我再去查的时候,你看啊,我就会这么去查了,直接什么get,后面写什么,直接写movie index2021,你就直接把这个别名当成你的索引去用就行了,然后呢,后面写什么呀,写这个。对吧,写这个就可以好来接下来我们走一下。看一下。六条数据。没问题吧,里面啊,你看英英语的这个三条啊,英文的三条数据。还有就是什么中文的三条数据,红海行动,然后呢,湄公河行动以及这个红海事件就都查出来了。能看到吗?同学们,所以说啊,你就不用怕,说你有多少个索引了,你的索引有多少个,我都不怕,只要你是能够取一个什么相同的别名。
08:06
对吧,那我就会什么基于这个别名呢,去查你的数据。啊,而且啊,大家可能在想,那如果如果说呃,我们这个这个索引啊,我还想做另外一种查询,可以你可以给他取多个命名,这没问题,就是一个索引,听好了一个索引可以取多个别名。就比如说啊,我可以给你起多个外号啊,你叫什么叫狗蛋对吧,叫这个叫帅哥。是不是啊,都可以,当然我的一个所一个别名呢,也可以什么指向这个多个索引,对不对,那就很多人我都可以叫帅哥是吧,很多人呢,我也都可以,什么叫口袋。明白吧,同学们啊,这要知道的啊,好行,那么这样就解决了我们这个索引分割以后,你的索引特别多的情况下,我查起来不方便的一个问题,这就解决了,很简单。对吧,好,但是呢,这个时候大家可能会又想到另外一个问题啊,你见索引这个事儿好像也挺麻烦。
09:02
对吧,给,呃不是见索引啊,鉴别名是吧,就是给索引鉴别名。就取取别名对吧,好像也挺麻烦,好像也挺麻烦,对不对。你看吗?就现在我们是你看,比如说我这个索引已经有了,有了以后呢,我要给你建明明,那我建明明我不得一个一个去执行吗?那我得一个一个给你去建,这个事是不是也很麻烦呀。对吧,那你说这个事儿我能不能解决一下呀。注意可以解决的,怎么解决呢?就是你在见索引的时候,你在见索引的时候,我可以什么直接给你指定你的别名的。明白我的意思吧,好,接下来做一个演示啊,建索引的时候指定别名啊,就是建索引好,建索引创建啊,创建索引直接指定别名啊,这个怎么用的啊,这个你可这么去用。在这儿。
10:01
我拿过来给你说一下就得了啊,同学们你看啊,我们建索引的时候,这不是我建一个索引吗?那我什么可以什么直接去写一个东西叫什么叫Alice,这就是他的笔名。理解吧,然后这就是那个别名,而且的话我可以指定多个别名,比如说你叫这个对吧,然后还可以再来一个,比如说叫什么,就刚刚我说的那个啊,叫什么我得来个逗号啊。好叫什么呀,叫狗蛋对吧。OK。然后到吧,就是我可以什么呀,同时给你的这个索引的键多个别名啊,然后你在这个索引在创建的时候呢,我就把别名给你创建好了。明白吧,来,比如说我们试一下啊,这个叫做,呃,我看看啊。嗯,叫movie,叫movie index1是吧,行,那就叫它吧,啊,就叫它来创建一下,好,那这个收音就有了啊,这个收音有了以后呢,我们也是啊,同样给它放几条数据吧,好吧,放几条数据啊。
11:00
放几条数据啊,就简单一点吧,我就放放一条得了啊,放一条能够演示一下这个效果就行了啊,放一条啊。呃,放一条好,那我是往movie index1里面放的数据。可以吧,来放进去啊,那你这个放进去以后呢,你看我们正常查数据啊,我正常查就是什么get什么get这个movie index1,然后呢,下划线这个search。对吧,你可以这么去查。好,那你这样是能够查到数据的,OK,那我们在给你建这个索引的时候呢,我就把别名别名别名给你指定好了,那我可以什么查别名,比如说我们的别名叫什么呀,有两个啊,一个是叫movie index。对吧,一个是这个名字对吧,一个是这个能看懂啊,然后呢,这个下划线search好你查一下。是不是也是一条数据啊,那么还有一个是这个叫get什么呀,就刚刚写的什么狗蛋是吧,你看这也是。对吧,下划线search啊,下划线这个search,嗯。好,走一下。
12:02
对吧,这是可以的。啊,所以说呢,呃,建别名麻烦这个事儿其实也能解决啊,我们什么在这个建索引的时候,就可以什么直接去给你指定别名的。明白我的意思了吧,啊,直接可以这么指定别名的啊,所以说我们就可以什么把你这个鉴别名和建,建索引和鉴别名这两个事给它绑到一起去做,反正你索引是一定要去建的,那你在建索引的时候,我就什么顺带的把你的别名给你建好不就完事了吗?对吧,这个问题就解决了啊OK。行呃,那么刚才我们演示的就是给这个现有的这个索引的取别名,然后呢,还有一种什么呀,我们在创建索引的时候呢,直接去指定别名啊,这个都可以啊好来,那我们再往后看啊。呃,这个是我们给大家去演示了一下,就是当你有这个多个索引的时候,我们可以什么通过这个别名的方式啊,通过别名的方式,然后呢,帮助你去更加灵活的去做这个查询。好吧,这感受到了啊,同学们想再来说一下,就是我们还可以做什么呢?给索引的一个子集创建视图。啊,比如说我现在有一个索引啊,然后这个索引中的话呢,我们有一部分数据呢,是经常要去查的,但是这一部分你在查的时候呢,需要给条件啊,你要去写条件查询明白了吧,但是我经常要去用。
13:12
啊,假如说你这个条件的话呢,还不太好写,就是要写大篇幅的代码,然后才能够把这一部分数据给他查出来啊,那如果说你这种场景的话,我们完全是可以给你啊把这一部分数据呢,给它什么建一个索引的啊,建一个别名的啊建一个别名,明白了吧,就是给一个索引的一个子集啊,这就是我索引的一个子集,就是一部分数据吧,单独去创建一个视图,创建一个什么别名。能明白啊,他也叫仕途啊,因为他这个他所做的事情呢,其实跟我们以前接触的那个视图是很像的。啊,我不知道你们还记不记得这个师徒这个东西啊,这个。MY生活中应该讲过,然后这个h base应该也讲过,好吧,这我不多提了啊,行,那我们来试一下吧,比如说。看好了啊,假如说我们有一部分数据,什么数据呢?就是这个是给索引的子集创建这个视图啊,就是一个创建别名,对吧,也叫别名啊,行,你看了啊,假如说我们在查数据,我们叫movie movie index,好movie index,然后呢,就查它吧,下方加search OK,那我查的时候呢,我们每次呢,不说啊,我不是说这个每次都查所有的数据,我只查他其中的一部分数据啊,假如说呢,我们要查filter,呃,这个直接写,呃,写个布尔吧,好吧,就假设我们查的很复杂好吧。
14:37
然后呢,Filter filter里面我们写的是。写的是这个,比如说这个写个range吧啊,假设我们查的很复杂啊,比如说呢,我要什么按照你的这个多半扣对吧,去查什么大于,比如大于等于这个5.0的啊,大于等于五的,然后小于等于这个八的啊行,这个是能够从你的这个索引中呢,查到这个一部分数据啊,应该是两条数据啊,一个是这个8.0的,一个是这个5.0的。
15:03
对吧,就假设啊,这个是我们经常要去用的,就这部分数据我经常要去用。啊,那你看一下啊,如果说我们每次用的时候呢,我都要什么啰里吧嗦的写这么多,那我就觉得会什么呀,很麻烦,因为你不是偶尔用一次,你是什么很要很频繁的去使用,那你既然你要很频繁的去使用,我就会考虑把我的这部分数据给它建一个别名,那怎么鉴别名呢?你要先想明白你的这部分数据怎么来,这部分数据呢,就是基于你的这个查询来的。听懂了吧,基于你的查询来的,所以说我们在建别名的时候可以这么去做。呃,我就直接复制上面的吧,啊来把这个拿过来,比如说我要给你鉴别名了啊,把它拿过来。好,给谁建别名呢?还是给我的这个movie index给他建别名。能理解吧,给他去加这个别名啊,加这个别名,然后别名叫什么呢?别名我们就叫做呃,Movie index,然后嗯,豆瓣时候吧,好吧,就是按照这个评分,我做了这个排序的啊,然后接下来注意啊,这里面我们还可以写别的东西啊。
16:07
看了啊,这里面我还可以写别的东西,呃,它里面可以写一个。我把这个格式化一下啊,呃,它里面可以写一个叫做query,呃,不在它里面写啊,应该是在这个里面写啊,爱的时候在这里面写吧,诶不是吗。我看看啊,他写到哪里来着,呃,Action,然后呢,我们去加别名啊动作,呃,那就是在它的外面嘛。诶,我看一下啊,他在哪来着,一下给忘了啊。呃,加别名的时候啊,在这个啊,它是个fair啊,不是query,我记错了啊,Future对吧?啊,那我可以写个felt啊,这对应该是因为我刚刚写的是一个future嘛,对吧?啊啊行,呃,那我们写一个这个,然后这个filter里面就写你的东西就行了,比如说我们要写一个什么range啊,就是把你这个条件写过来啊,就是你的JT,然后呢,按照你的多半s score。
17:02
啊,然后呢,查表示这个是5.0啊,这是五,这是那个八就啥意思呢,我这个索引,我这个别名在建的时候呢,我是基于你的条件去建的,就它会什么呀,从你当前这个movie index中,基于你的这个条件的去查数据,查出来的数据,我给你建了个什么别名。好吧,来,我们走一下啊。行成了啊,成了以后呢,我们再去查的时候呢,我就什么直接写它就可以了。对吧,直接写它来叫什么叫这个movie,呃,Movie index,然后呢叫DDS对吧,豆瓣,然后呢,下划线search好你这么去查。就把数据查出来了,那这个数据查出来以后,你看就是两条数据,一个是8.0的,一个是什么呀,这个5.0的。看到了吧,这就是一个索引的一个什么子集啊子集。呃,明白我的意思了吧,同学们。听懂了吧?啊,这个给你演示完了啊,OK,行,那么还有一个事儿给大家去说一下啊。
18:01
就人家还支持你做另外一个事情,什么事情呢。呃,在这。他说啊,还可以什么实现?什么呀?从一个索引切换到另外一个索引,在这个运行的集群中,可以无缝的从一个索引切换到另外一个索引啊,这又是一个什么事呢?大家去聊一下啊,你比如说啊,假设我们现在这个在这个代码中啊,我写的这样的代码哈,嗯,来这吧,来这是第三个啊,就是呃,索引这个无缝切换啊无缝切换好大家来想这个事儿哈,假如说呢,我现在在我的这个Java代码中,然后呢,我要去查你的ES啊。OK,我在Java中,我要查你的ES,我目前查的是谁呢?我目前查的是叫做movie index。能写吧,我目前查的是它,我就把它写死到什么写死到我这个代码中了,但是呢,过了一段时间以后呢,我说诶我不希望你这个什么呀,我不希望你查他了,我希望你查的是这个movie,什么index叫CN,我希望你换成这个索音去使用。
19:02
好,那这个时候你想一下啊,你代码中已经写成写死了,已经写的是他,那现在我要去换,那你就只能老老实实去改你的代码,就把你的代码都停掉,停掉以后呢,把这个改了,改完以后呢,重新这个启动,重新部署,重新上线。那这一套工作就会很复杂,很麻烦。能明白吧,好,那如果说你一开始在设计的时候,你就能够预想到这个事情,对吧。就将来我可能会改好,那我就不会把你索引真正的名字写到这儿。我就写一个什么别名,我就写个代号。明白吧,你比如说啊,我一开始我就不写他,我写了一个什么,我写了一个我叫什么,就叫movie的,呃。叫什么呀,我想想啊,嗯。叫什么呢?这都是movie movie index,那就是叫MOVIE202022吧,好吧,我就写了个MOVIE202。OK,但是啊,你的movie位2022的话,你一定要能够保证是能够查到这个索引的,所以说呢,我们就可什么呀,可以考虑给你的这个索引的这样一个别名,这个别名就叫什么末位2022,那我代码中是这么写的啊,那现在它是什么呀,它是。
20:11
我这个别名说指向了那个索引,那如果说你现在希望什么在你的代码中去换了,就是我将来不用这个索引了,我想用这个索引。那我的代码是不需要去动的,因为我的代码中写的就是它。明白了吧,那我要做的事情就是把索引注意啊,把你的这个别名从它上面移除掉,对吧,就是从比如说从什么从那个movie index上移除,呃,移除掉。好移除什么移除它对吧,把它移除掉,然后呢,直接什么呀,加到什么呀,呃。然后呢,加入到啊,从上面移除这个别名啊,移除这个别名。好,然后呢,加到什么呀,把边民啊,把这个什么边民啊,再把好把这个边民。
21:06
拿回来啊,把这个频频,然后呢,加到加到哪里呢?加到我们的这个movie in index cn上就可以了,就是你的代码层面,你不需要做任何的改动。因为你没有把它写死,你能听懂吗?这个是没有写死的啊,我是直接写的它,那你写的是一个别名,那你的别名我将来具体指向哪个索引,我是可以在我的ES中灵活去做调整的。能明白了吧,我可以在ES中灵活做调整好,那么这个时候你看了哈,我就可以这么去做了,来给大家去演示一下。比如说啊,现在我先把这个别名给它建出来啊,我们来先演示这个效果鉴别名,我把它拿过来。这见名啊好,那这里面我就这些就不要了啊,这个filter就不要了啊,Filter不要了。OK吧,你看了哈,我给这个movie index建个别名,我叫什么?我叫做MOVIE2022是吧,就建好别名啊,来建一下,建好便民以后,你看我的代码中,我是这么写的啊,就是get movie2022,好,下回叫search,这是我当天查的数据,你看一下啊,我当天查的什么,我当天查的就是全都是英文的吧,但是呢,我们说了啊,以后我们不用英文了啊,中文还是比较强大的,我们要使用中文了,那你就需要什么呀,需要让他呢能够查到中文的,就说白了,你在后台呢,你要把这个别名换到什么,换到你的这个索引上,那你怎么做呢?我们要做的操作就是把别名从你的这个索引上去掉,然后呢,加到你的这个索引上,OK,来,这个操作我们拿过来。
22:34
呃。在这就是两步啊,同学们,两部你看了哈,首先从你的这个movie index上面把哪个别名呢,把我们的MOVIE2022拿掉,对吧,这是的动作啊,然后加到我的movie index cn,然后呢叫MOVIE2022,就说白了,我把这个别名呢从它上面拿到,然后呢加到你的这个索引上面。其实对于我的这个代码中来讲的话呢,他一直都是使用的这个家伙,对不对,只不过我在背后啊,偷偷的把他所指向的索引给你更换了一下来,你看一下啊,刚才我们在查的时候,你查到的还都是英文的对不对,现在我把这个只要在我的ES中,我一执行好,你代码中查的时候,你查到就是中文的了。
23:19
能看到吧,这样就做了一个无孔切换啊,而且大家注意哈,这个操作它做成了一个原子操作。明白吧,什么叫原子操作,就是你们两个要成功都成功,要失败都失败,就不可能出现说诶,那会不会我把B去掉了,但是没有加成功的情况呢?不可能出现。因为如果说我允许这种情况出现的话,那就会导致你刚把别名干掉了,干掉以后呢,你再去加的时候没有加成功,那我再查的时候,这个东西它是不指向任何索引的,你是查不到任何数据的。理解吧,但人家做的是一个什么呀,原子操作,那原子操作的话呢,诶你就不用担心这个事儿。听懂了吧?啊,这就是我们将来诶可以去使用的,你在代码中,你就千万不要把你的别名,把你的索引名给他写死了啊。
24:06
是不是你要去考虑到这个事情,如果你要换,那你怎么换呀。对吧,啊,把这个事考虑一下啊,行,嗯,这是我们的这个第三种情况啊,就是索引的别名啊,它就可以怎么解决解决诶这么几种情况。好吧,当然我们目前迫切需要的应该就是第一个好吧,来它下面这个操作的话就是我们都讲过了啊,见表师声明以及存在的加,然后呢,这子集啊呃,查询别名啊,然后删除啊,删除的话就是这个。对吧,刚刚在这里面用过了啊,我就不给你演示了。呃,还有什么查询这个别名列表啊,这个别名列表的话呢,也可以去查一下。酒精有哪些别名对吧,这个简单演示一下得了啊,查一下看一下啊就是。呃,我的这个movie index你看啊,它是有多个别名的啊,这是个别名,这也是个别名吧,我的这个也创建过很多别名啊,你看对吧,还有什么这个这个你看这个别名是不是都有的呀。
25:00
对吧,啊,这个知道就行了啊,OK行。
我来说两句