看下面这个表格里的文档内容:
如果我这时候想要在这么多文档中查找带有 比亚迪
的我要怎么查,传统这个查询里面我想查这个比亚迪
的话。就是先在文档1里面搜索一下有没有 比亚迪
,没有,我在到文档2中查找比亚迪
,还是没有,然后到文档3里面查询也是没有比亚迪
的,再到文档4里面查还是没有 比亚迪
,直到到文档5里面才找到比亚迪的文档信息。
然后再把比亚迪
的这个文档5的信息再返回给客户端进行展示起来,这就是传统方式的正排索引,其实他的查询效率特别的低。
接下来说下什么是倒排索引
其实你像很多搜索引擎技术(比如:Solr、Elasticsearch、Lucene)索引用的都是倒排索引,那倒排索引到底是什么意思?
倒排索引会根据你的文档内容把一些关键字做一些分词,相当于用关键字定位到你的文档内容,这是什么意思?
举个例子,还是以这个文档讲一下,这5条文档里面全文检索首先会分析一下,把一些关键字进行整合起来,如下列表所示:
比如说这个 小
可能是经常搜到的关键字,还有一家
也是比较多的,包括科技公司
这也是关键字,还有什么创始人
,包括开的汽车 奥迪
也是一个品牌,他也是个关键字,他会把这些关键字记录下来,这些关键字就会有个关键字的单词表。
这时候分析小
这个字,它是唯一的。
那么 小 在 1 2 3 4 5 里面都有存放,这个小
字会有个表格,会记录小
的关键字在哪些文档出现了有个序号会全部记录下来
再来说一家
这个关键词,一家
它也是一个关键词,经常通过这个去搜索,那么一家的话是不是在文档1里面出现了,文档2 里面他也出现了,文档3没有出现,文档4也出现了,文档5也出现啦,那他怎么记录的,就是 1 2 4 5 。
大家在这里记住一点,最终这个词库的话会把文档内容中一些常用的名词通过一个单词表记录一下它的出现频率,这些单词哪些文档出现次数比较多的,它都会记录下来。
那么这些我们就可以把他叫做词库,比如说最近出现了什么新闻,热词,那么这些热词的话可以自己去联网,去读哪些热词的,或者手动添加进去也是可以的,添加到词库里面去的
比如说我是用户搜索这个奥迪
,他不需要像正排索引
那样去文档里面一个个的找,他只要去找我们这个索引表就行了,通过这个表我就知道,这个奥迪
在文档 1 4 里面都出现了,那这时候就可以快速的返回给客户端,反过来再搜索比亚迪,比亚迪 在文档 5 里面出现了,那这时候直接返回文档5 内容给客户端不就可以了。
这就叫倒排索引,他比任何索引理解起来都要简单,说白了他对应的文档内容关键字做了一些收集,把一些关键字在哪些文档出现的评率比较多的会收集起来,就是这样的流程。