00:00
再来我们来说一下分片原理,那么其实分片啊,我们之前讲过是因为一个索引呢,它里面的数据量太多了以后会影响它的效率。所以我们把一个大的索引呢,拆成几个部分,几个部分对不对,那这样的话,每一个部分我们称之为叫一个分片,那么所有的分片组合在一块,就是一个完整的索引数据,这个咱们讲过,对不对?所以啊,每个分片其实它是我们ES当中最小的工作单元,你的这个写入啊,你的读取啊,都是基于分片来完成的。咱们之前讲过,你来一条数据,我怎么知道它会放到哪一个分片当中呢?它有一个路由计算,只要通过计算就能找到你的那个分片的位置,那然后就可以进行我们的写入操作,对不对?那么你写入完成以后,它会进行一个倒排索引的建立,然后呢,再去在查询中去用到这个倒排索引,那么就可以快速查询到我们的数据了。所以啊,这里面的倒排索引的概念是非常重要的,这个咱们之前给大家提过啊,首先我们ES软件它使用的是倒排索引的结构,它适用于快速的全文搜索。
01:07
那么ES软件啊,是建立在全文搜索引擎库Lucy的基础之上的搜索引擎,它隐藏了Lucy的一个复杂性。取而代之的是提供了一套简单易用的API来进行操作,不过呀,它的底层是Lucy,这个事儿啊,还是非常重要的,为什么?因为我们ES当中的倒排索引其实就是lo的倒排索引。那么传统上我们检索一篇文章啊,我们会逐个便利它对应的一些关键词的位置,比方说大家看我们传统意义上来讲,我们1001对应的一篇文章对不对,那这样的话,我想去进行查询的话,怎么办?我们的模糊查询,而这个模糊查询的效率是比较低的,为什么呢?因为它每行数据都要去逐个匹配,匹配以后还有全量去进行模糊查找,那这样的话效率是非常低的,对不对?可是呢,如果我们换一种方式的话,比方说我将文章中的关键词跟这个ID做绑定,那么大家看一下,比方说呀,我们的这个name a1001,我们的张,诶,我们的1001,我们的张三,我们的1001,这种方式的话,你查很多的关键词的话,一很快定位到这条数据,那么查询不就快了吗?对不对?同学们,所以这里面还涉及到一个分词的概念,就是我的张三,我为什么要分开呢?是因为有的时候我们会根据姓来查,有的会会根据我们的姓名来查,所以啊,这就对我们的这个查询的需求有了限制。
02:32
否则呀,你这个插个is,插个I,那这个太复杂对不对,所以我们这里会用一些关键词来做这个事儿,而关键词可能会有个分词策略,这个咱们后面再讲啊,然后呢,我们的这个倒排索引呢,它通过分词策略,它形成了那个文字单词以及文章之间的映射关系,这种我们的映射关系和我们的一种词典顺序啊,我们称之为叫倒排索引,好不好,同学们就是这个啊,那么刚才我们提到了什么呢?分词,这里的分词啊,其实它是有专门的分词器啊,这里咱们说一下,哎,咱们叫分词器,为什么会有分词器呢?是因为我们有的时候啊,这个分词啊叫对中文进行分词,有的时候是对英文分词,你中文和英文的分词效果其实是不一样的,对吗?这个我相信大家是能够体会的出来的,这个没有问题啊,还有一个就是某些数据啊,它能分支,某些数据不能分支,这个就需要设定它的一个什么类型了,还记得吗?我们有一个叫keyword,还记得吗?我们讲过这个事情是吧。
03:32
还有一个叫text,如果你的字段设定类型为keyword,那么就说明它这个关键词它是不能被分词的,它需要完全匹配才能查出来,那如果是一个文本的话,就说明它可以被分值,而这个分值到底怎么分,取决于那个分值器啊好了,这个呢,咱们说一下就可以了。其实还有当我们进行分值操作的时候,还有个这个东西,我们叫做什么呢?IK,那IK我们写上叫max,我们的word这个东西。
04:00
这个表什么意思呢?它表述的是最细力度的拆分,就是能拆就给它拆了,还有一个呢,我们叫什么呢?叫I,我们叫做smart,这个smart呢,它表什么意思呢?它表示说最粗力度的拆分是不那么细,那比方说这个你这个可能就1234用空格就切分了,那如果是细力度的话,可能这个张和三就区分开了,对不对?所以啊,这个是跟分词器有一定的关系啊同学们,嗯,好,那我们继续吧,咱们再往下啊,在倒排索引当中有三个名词大家需要了解一下,第一个我们叫词条。这个呢,我们写上啊,咱们写上咱们叫做词条,哎,求是它还有一个呢叫词典,叫词典,还有一个叫套牌表,套牌们的表,那么词条是啥意思呢?词条简单来讲啊,它就是我们索引里面的最小存储和查询单元啊,我们叫索引中啊,索引中我们的最小的什么存储。
05:01
和我们的查询单元,你不就想查某一个我们的单词,某一个文字,某一个汉语组合嘛,对不对,哎,这就是词条啊,啊,那么在英文当中啊,一般就是一个单词了,在中文环境当中一般是一个词组。那中文当中一般是一个词组啊,好,那么这个词典又意味着什么呢?这个词典呢,它其实简单来讲又称为叫字典啊,叫字典它是我们词条的集合啊的一个集合啊,那它它底层呢,一般会用两种数据结构来进行实现,一个叫B加数啊,咱们叫B加B,还有一个叫哈希表,那哈希表大家应该比较熟了,对不对,哈希map嘛,嗯,就是它这种感觉啊好了,这个咱们就不再细说了,OK,咱们再往下。下面呢,我们称之为叫倒排表,倒排表呢,就意味着你的那个关键词它出现在什么位置,它出现的频率是什么,所以我们在倒排表中每条记录就被称为之为一个叫倒排项啊有这么个概念,那么倒排索引的一个搜索过程是什么样子呢?这里我们给大家说一下,就是倒排索引的搜索过程,我们先去搜索,搜索的时候呢,查询单词的那个词典,然后看看我们那个单词啊在不在这个词典当中,如果不在,什么也不说,搜索就结束了,对不对?那如果在这个词典当中的话,他要看一看单词在倒排列表中的指针啊,看看里面那个指针是什么,然后呢,通过这个倒排列表呢,去获取它这个单词所对应的文档ID的列表,然后呢,拿着文档ID呢,去对应我们的数据,那这样的话就可以了。
06:31
所以啊,我们把前面这个相结合,你会发现是一样的,那先去找我们的ID,找到ID之后呢,再去找到对应的文章内容,那不就OK了吗?对不对,同学们就是这个意思啊,这是我们的倒排索引的搜索过程。
我来说两句