倒排索引
elasticsearch有如此高的搜索性能,无异于使用了倒排索引。
倒排索引中有两个重要的概念:
- 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
- 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条
创建倒排索引是对正向索引的一种特殊处理和应用,流程如下:
- 将每一个文档的数据利用分词算法根据语义拆分,得到一个个词条
- 创建表,每行数据包括词条、词条所在文档id、位置等信息
- 因为词条唯一性,可以给词条创建正向索引
此时形成的这张以词条为索引的表,就是倒排索引表,两者对比如下:
在这里提一下,正向索引就是一张数据库创建的表
倒排索引的流程
这里以搜索华为手机为例
- 第一步用户输入华为手机进行搜索
- 第二步对用户输入的条件进行分词,分词结果为“华为”,“手机”
- 第三步在倒排索引中查询词条对应的文档id
- 上一步查询到的对应的文档id,可以通过正向索引来查询具体的文档
下面用一个流程图来介绍: