00:00
Search是面向文档型的no circle存储数据库,它存储一条数据就等同于存储了一个文档。存储结构中有索引、index类型、type文档、document字段、field的概念。ES软件设计时将这些概念和关系数据库进行了类比,方便大家的理解和使用。那么这里的索引就类似于数据库,类型类似于表,文档类似于行,字段类似于列。那我们查询某一个数据库,某张表的数据,我们会写蛇口文对吧?那么同样道理,我们在ES中想查询某条数据,也会按照类似的规则,比方说索引呢,类型啊,文档啊,字段按照这个规则去进行查询。那么早期版本啊,这么设计是没有任何问题的,可是这种概念它违背了全文检索的原则和基本思想,什么意思?首先咱们先说说索引的问题,在关形数据库中,索引其实是为了优化查询所涉及的数据库对象,没有索引它也能查询,对吧,它就是慢。
01:01
而ES软件呢,专门用于全文检索数据,所以索引是整个搜索引擎当中的关键,甚至我们说在搜索引擎中万物皆索引也不为过。那么ES中为了能够做到快速准确的查询,它使用了一个特殊的概念来进行数据的存储和查询,这个概念我们称之为叫倒排索引。那么有道牌索引其实就应该对应于什么,我们叫正牌索引,咱们叫正牌索引,这个正牌呢,我们也称之为叫做什么呢?叫正向索引,叫正向索引咱们举个例子,比如我保存一篇文章,那么里面应该有文章编号,文章内容、作者以及发布时间,那咱们简单一点,我这里就是编号,文章编号还有呢,文章内容,那这里呢,我们给他来一个,咱们叫1001,哎,文章编号,然后内容是my name,咱们叫it张三好BY一个1002 MY,咱们的name,嗯,咱们叫李四。
02:04
好了,写完以后我们就可以通过我们的文章编号去快速查询到文章的内容,那么之所以检索是比较快的,是因为我们将文章编号设定为组键,同时生成组件索引,然后通过组件索引快速关联到咱们存储的信息。那么这种索引我们就称之为叫正向索引,也称之为叫正牌索引。可是呀,我们如果想要查询文章的内容中包含了哪些热门词汇,那么这个时候就比较麻烦了,为什么?因为我们需要做模糊查询,模糊查询的效率就明显差了很多,而且它要每条数据要去辨利一下,那么性能会差了很多。而且啊,你查询内容的大小写、时态等等都会影响查询的准确率。比方说我想查询张三,那如果你的这个张三是个大写的怎么办?你要查还是不查?
03:00
你这边是小写,我想查的是大写,那你说它算不算?它算匹配了呢,还算不匹配呢,对不对,所以啊,它都会影响咱们的查询准确率,所以这就需要我们换一种方式来将索引和数据关联,这就需要用到我们之前所提到的叫倒排索引啊,举个例子。我们现在呢,我们需要干嘛呢?将我们的这个ID保存数据保持不变,但是我们的索引不像刚才一样了啊,我们需要换一种方式,我把这个呢,写一个叫keyword,我把关键字呀,和咱们那个文章的ID和一个关联好了,来大家看一下我叫什么呢?ID,然后呢,在这种情况下,比方说我想查询这个name,诶拿它做一个关键字,那这个name呢,它就对应了什么呢?诶对应了1001,哎1001,它对应了一个什么呢?1001好了。那如果我想查询那个张三的那个章啊,哎这么写,那这个时候呢,我们的文章当中啊,在保存的时候我就知道哦,我有个章,那马上呢,1001就会放到这儿来,所以你会发现我们现在是通过关键字来查询我们的,诶组建ID,然后再关联咱们的文章内容,以前呢,咱们是通过组件ID关联文件内容,再去找它的关键字,所以正好跟之前是相反的,这个咱们就统称为叫倒排缩引。
04:21
那么这个倒排索引呢?其实你会发现它的查询效率应该是比较快的,可是你会发现我们这里会体现表的概念吗?不会。如果是模糊查询的话,他会告诉你啊,我们的这个数据啊,它在哪张表里面,它的模糊查询的规则是什么,对不对,但是在倒排索影当中,它强调的是关键字和这个文档编号的一个关联,所以那个表的作用已经没有那么明显了,所以咱们课件当中大家可以看到他就说了,我们这里的type的概念已经被逐渐弱化在search当中,我们现在啊,在当前版本已经被删除了。所以它就没有这样的一个概念了,好吧,所以别的呢,我们还可以对应上,比方说索引呢,数据库,我们的文档行,我们的字段列,这个都没问题,但这个类型的概念已经不复存在了啊,咱们在用的时候也希望大家注意这一点,好吧。
我来说两句