00:00
好,我们来继续说啊,呃,那我们通过这个索引别名啊,我们解决了一个就是你的索引分割的太频繁,然后导致我将来这个查数据不好查的问题,对吧,现在解决了啊,解决以后我们再来想另外一个问题就是。谁帮你建索引这个事儿对吧,谁帮你建索引。就现在我们看到说,诶,人家ES是能够帮助我们去见索引的,这个事儿挺好。只要你给数据,只要你给数据,他就能够什么按照数据呢,把这个索引给你建好。对吧,这个事儿挺好,但是呢,诶,它里面有点不可控的是什么呢?就是它会按照你的数据的类型呢,自动去做推算啊,特别是对于这个字符串来讲。它会推算出两种类型,一种是你的text,一种是你的keyword。对吧,它默认就会给你存两种类型,但实际上我们真正的情况下,我们的字符串不一定说都需要存这两种类型,有的呢has就可可以了,有的呢keyword就可以了,有的呢是需要两种的。
01:04
对吧,所以说我们希望能够自己去控制这个类型,那如果说你要自己控制的话呢,那就得你自己去建索引。那你就用不上什么ES给你建索引的这个什么好处对吧,那你自己建索引你能够控制了,但是呢,坏处就是人为操作,这个是很麻烦的,你每天都要去操作一次,每天操作一次,这个事情你长年累月积累下来,你这个肯定会崩溃的啊。对吧,像这个时候我们可以怎么解决呢?啊,ES帮我们提供了一个技术叫索引的模板,啥叫模板呢?啊,就是我们把建索引这个事儿呢,还是交给ES去做。但是呢,我告诉ES了,说你别给我瞎搞。对吧,你别给我自以为是啊,就是你别给我按照自己的推算去做,我给你一个模板,你照着我这个模板去帮我去建索引。能听懂吧,那我的模板中我一定是写明白了,你的字段是什么名字,你的字段是什么类型,我一定都写明白的,那你将来建索引的时候,你就照着我的模板去帮我建索引就可以了。
02:09
这样的话呢,我们既可以控制你的字段的类型,也可以让ES帮我自动键索引,就解放了我们的双手。好吧,来看一下啊。这个叫index tablelate,就是索引的模板啊,顾名思义就是创建索引的一个模具啊,那我们可以定义一系列规则。来帮助我们构建符合特定业务需求的索引的mapping和setting,就比如说啊,你的索引中,你要求你的mapping是什么?Mapping不就是你的索引的结构吗?这个setting就是比如说你有几个分,你有几个Sha的呀,对吧?啊,你有几个Sha的什么的,当然了,别名是什么都可以去指定的啊,你可以一套都把它指定进来。那么将来我们的ES再去建索引的时候,他就会什么参考你的这个模板,按照你的模板,然后呢,帮助你去建索引。理解了吧,来,接下来我们给大家去演示一下啊。
03:00
那首先我们得先搞一个模板啊,这个模板的话呢,我们举了个例子,我把它拿过来。拿过来给他去解释一下就知道了啊,诶不能删。好拿过来啊,解释一下来,这是我们的收银的模板啊模板对吧?好放到这你看了哈,呃,这个模板的话呢,我们取了个名字叫put啊,就是叫template,然后后面是你这个模板的名字啊,比如说我们叫2022吧。对吧,叫to movie2022。行,然后呢,在这个模板中哈,大家注意,我们就已经明确的指定了你的mapping,呃,明确指定了你的mapping。然后呢,M里面呢,就是我们的字段类型,比如说哎,你将来有个ID,这个ID呢,是一个字符串的,但是呢,我告诉你,你就给我存成keyword就行了,诶那就说明什么,说明这个ID啊,将来是不会做分子匹配的。啊,我还有一个电影的名字,呃,电影名字呢,诶,你给我传成text类型的,说明什么呀,说明将来这个家伙呢,是要做分词匹配的,但是他不会去做。
04:05
只等判断,那我就不需要再去写什么呀,写那个什么keyword类型对吧,我直接一个text就够了。好,这就是我的。什么呀?定义好了,这个模板里卖品啊,当然除了这个mapping之外,我们还还可以什么在模板中写别的东西啊,比如说别名。对吧,就将来你基于我的这个模板去建别建这个索引的时候呢,我顺带的会给你取别名。OK吧,来看一下啊这个别名。它的写法就是什么大括号里面有个index,后面是指的是什么query啊,这个大括号的index它会动态的替换成你见的那个索引的名字,就说白了啊,我有一个索引叫A,我是基于这个模板建出来的,那么同样它就会有一个别名叫A-query就是它会把那个索引的名字动态的替换到这里面,给你生成一个别名。好,当然我们还会有一个叫什么叫,就是固定的一个别名,比如叫什么叫movie tax query。
05:04
这就是只要你是基于我这个模板建出来的这个索引,他们都会有一个统一的别名,叫这个名字。对吧,你看这一套我都给你搞定了。那将来比如说我们想去查所有这个movie test数据,那我直接什么查这个别名就可以了呀。对吧,一套都给搞定了啊。好,除了别名之外,还有什么东西呢?还有就是我们的setting啊,Setting也可以指定,比如说setting里面,我们目前要指定的就是你的分片的个数,你建好的这个索引,将来有几个分片,我是可以什么指定好的,比如说一个、两个,三个、四个,你都会自己指定。理解吧,啊,这也是可以什么写到你的模板中的啊好,那你把这个该约定的东西,或者什么该规范的东西呢,都规范进来了,将来我的ES呢就可以啊照着这个呢去建索引。对吧,那最后的问题就是ES他怎么知道啥时候用你的模板呢?难道说我每建一个索引我都用你这个模板吗?
06:02
不科学吧?对吧,你现在是movie的,那我来了一个什么actor的,或者说我来一个别的我别的业务的一个索引,那我也照着你这个抄吗。那我抄你的字段。我是叫这个字段吗?不是吧,所以说啊,你用模板你也得有一个规则啊,怎么用呢,看这个地方。这个就是使用模板的规则,啥意思呢?它会按照你索引的名字来去判断要不要用这个模板,因为这里面我们写了一个index patterns啊,注意啊,我写的是一个movie_test的信号。就将来你的索引的名字,如果是能够跟这个规则匹配的情况下,那我就会用你这个模板。能听懂吧,比如说我叫什么叫movie_test叫什么1002对吧,Movie_1002你看一下啊,都能跟它匹配吧。那么这种索引它就会直接使用你的这个模板。
07:00
OK吧,来把这个解释明白以后,下面我们给大家去演示一下啊,我把它先建出来啊,建出来有了吧,有了以后这个模板你就不用再去管它了啊,接下来我要建索引了啊。叫啥名字呀,同学们,比如说我叫什么叫movie,嗯,Test,你看啊,他是什么movie test下环叫test对吧,下环test子,比如说我们今天是2022杠零三杠二六好。对吧,那我直接往里面放数据可以吧,我直接放数据,就是我来了数据以后呢,直接建索引,然后建索引的时候,他会用我的模板,这一套都给你搞定啊,看一下啊,那我放数据的话呢,我把数据呃,数据拿一下啊,这个数据比较简单哈。呃,数据比较简单,就是它不就两个字段嘛,一个是你的呃ID,一个是你的这个电影的名字对吧?呃,ID我就叫111吧,那电影名字我们别别别写这个了啊,写个别的吧,因为它支持中文的是吧,那我就写个别的啊叫。呃,叫什么呀,速度与激情是吧,可以吧,来这是一个啊。
08:07
行诶我看看拿错了啊呃put啊这个这这不能不能不能这么写啊少东西啊下好像到是吧,好然后呢,比如说ID就是111吧啊ID就一吧好一啊走。看到了吧。这个收益就建好了,好,那这个收益建好以后,那接下来我们干嘛呀,我们去。查数据啊,先查数据get。放到这,然后呢,下划线search好数据我肯定能够什么正常查出来,这个没毛病吧,而且你去看他的mapping啊,就是你get一下什么呀,Get一下这个movie test。Movie test。好,然后呢。就这个对不对,好把它拿过来,然后呢,你去什么看它的这个mapping啊,下划线这个mapping好,你看一下啊,它的mapping中啊,你看一下跟这个一样不一样。
09:01
一模一样吧。是不是因为你看我给的两个都是字符串啊,如果说按照按照什么这个ES默认推算的话,它都会给你什么存成两个类型。你比如说我给你演示一下啊,我再来一个索引叫movie。叫movie,呃这个这个这个呃,我不写那个下滑叫我就叫movie test那行吧,首先啊,这个我要保证什么,保证它跟我的这个模板是匹配不上的啊,匹配不上的情况下来看了哈,我帮它里面放东西,嗯,比如说我写个日期吧,2022杠零三杠二六对吧,就是我没有通过模板来建的啊下方下dock啊,比如说来个什么222。啊,来个二吧,啊来个二好,这里面放什么东西呢?我就随便放点东西就得了啊好,我放一个呃,叫222啊,这个是速度与激情二可以吧,走一下这个索引加好了吧,加好以后来我们就直接查他的mapping啊,查他的mapping来get一下叫movie。
10:03
Test。就这个对吧,然后呢,下划线卖品好,你看一下吧,查一下这个时候你会发现啊。它的ID里面text keyword,它的name里面text keyword,看到没有,是都给你存了两种的,为什么存两种呢?因为你现在建的这个索引。他就会,呃,这个索引它就会什么,按照ES默认的方式帮你去做推算,因为他找不到任何的模板让你去参考。但是像我们上面建的这个索引啊,因为你的索引的名字,索引的名字是能够跟我这个模板的这个规则匹配成功的,那么我的这个索引在创建的时候,它就会什么自动的去参考你这个模板,那你这个模板中你约定了你就是一个keyword类型的,你就是一个text类型的,所以说我的这个索引建出来以后,你看到的效果跟我们的模板里面这个约定是一样子的。看到了吧,同学们好,这就是我们这个索引模板,所以说这个索引模板它就能够解决,我们想让ES建索引,但是呢,控制不了字段类型,这个问题他就帮你解决了,就现在我们既可以让ES建索引了,我还能够自己去控制这个类型,我只需要在模板中把它写的清清楚楚的,那么ES会乖乖的,诶按照我的这个模板去建索引。
11:23
同样。你建索引这个事儿交给ES了,那我们刚刚说过建别名,我一般都是跟建索引同时发生的,因为我也不可能说我单独给你的每一个索引,我再手动建,建建这个别名对吧,所以说你看了哈,我们刚才建了这个索引。对吧,它正常情况下就会存在两个别名,一个是叫做索引的名字,加上一个query,一个是movie test query来,接下来我给你查一下这两个别名,你看了哈,我就写到这啊,Get movie index,呃,叫movie test是吧,Movie test,然后你看一下是不是有一个跟你的索引的名字一模一样,然后后面加了个杠,Query啊,对吧,这个别名我没有给你手动见过吧,它是通过我的模板帮你创建出来的,来查一下是不是也有条数据叫数据与激情,同样的道理,它还有一个什么呀,统一的,比如说get movie。
12:19
Get movie,然后呢,还是一个test query,你看一下啊,是不是有一个统一的别名叫这个名字呀,Movie test query,好,那你看一下,我在查他的时候下划线,Search。走是不是也有这个数据啊。能看到吧,好,那么你就基于注意啊,你就基于这个规则,然后呢,去做你这个索引的分割,比如说我3月27号的时候,对吧,我来了一条数据,我也叫一啊,它也是一一,但是呢,它不叫速度与激情了,它叫做呃,它叫做什么呀。这个最近。有什么电影啊啊,叫水门桥是吧?呃,叫长津湖啊。OK,你看这是我三月27的啊,我找一下。
13:00
对吧,他也成功了,成功以后呢,你可以去查哈,就是get什么呀,Get这个各种东西都把它拿过来。呃,再写一下吧,你看了啊,Get movie test,然后呢,三月27,这是我的索引,然后呢,你可以这么去search,去查数据,肯定能够查出来。对吧,而且你去看他的这个麦品啊,同学们,他的麦品也一定是什么。按照我们的模板来的对吧,而且注意啊,它也有一个别名啊,它也有一个别名,当然这个别名你现在没有什么含义啊,就这个对吧,它也有一个别名啊,这个别名其实现在没有什么含义啊。找一下。可以了吧,同样它还有一个别名,这个别名叫什么呀?叫movie test。然后呢,像这个test query对吧,你看啊,这个别名是我加给什么呀,加给你的每一个索引的,就你看啊,它这个是不是也有这么个别名啊。
14:01
对吧,那就说白了,你分割好的这个索引,你不不管是三月26的,还是三月27的,我在我的模板中,我统一写死了,你们有一个统一的别名,所以说如果说我现在再去查这个别名的话,那我应该能够查到两条数据。对吧,一个是速度与激情,一个是长津湖就你,所以你随便分割。对吧,但是呢,你们都会有一个统一的别名,那我将来想去查这么多数据,我直接查这个别名就可以,这一套视频我们都通过模板把它实现了。OK吧,同学们啊,那这个模板我们就这个说完了啊好。行,呃,这里面查看mapping什么的都说过了啊,然后呢,呃,你还可以什么呀,这个查看系统中已有的这个模板清单啊,这我就不给你查了哈,你自己去看看吧,还有什么查看这个某个模板的详情啊,你你怎么建的对吧,你长时间这个不看,你忘了的话,那你什么把这个模板给它调出来,然后你看一下它里面都有什么东西。好吧,哎,这我就不再跟你去说了啊好行,那么最后我们这个统一的啊,去这个做一个小小的这个梳理哈,你看一下我们从一开始的分割索引。
15:08
对吧,然后呢,引出来的问题就是我们知道了,所以的分割给我们带来的好处呢,就是我可以什么应对字段变更的场景啊,一个是变更,再一个是呢,他把我们带来的好什么好处呢。就是我可以减少数据扫描的范围,因为你把数据呢放在不同的索引中了,对吧。这两个是好处,但是呢,它带来的一些问题就是什么呀,问题是这样子的,第一个问题。第一个问题,你要做分索引的分割,那比如说我每天都做分割,那我每一天都得建索引,这个索引谁帮我建?对吧,第二个问题就是。你分割了以后,虽然说你能够减少数据的扫描范围,但如果说我就想查询某一个周期的数据,这个时候你会涉及到很多索引,那我应该怎么去查?对吧,我们遇到这两个问题,那这两个问题我怎么解决的呢?你很多个索引的这个茶,我们可以什么通过别名来去解决,索引的别名来去解决好,那么你见索引这个事呢,我们还是可以交给ES去做,但如果说你交给ES做的话呢,你就要去解决一下,你要自己去指定类型这个问题。
16:16
对吧,以及什么呀,鉴别名,你怎么把别名给他建上等等一套东西啊,我们最后呢,都可以什么通过模板来去解决。明白我的意思了吧,所以说啊,这仨啊,这哥仨呀,你在这个生产环境中一定是放到一起考虑的,只要你要做分割索引了,你就会用到别名,你就会用到索引的模板。好吧啊,这哥仨是放到一起考虑的啊,行,就说这么多了啊。
我来说两句