倒排索引
倒排索引的概念是基于MySQL这样的正向索引而言的。
正向索引适合于根据索引字段的精确搜索,不适合基于部分词条的模糊匹配,而倒排索引恰好解决的就是根据部分词条模糊匹配的问题。
倒排索引中有两个非常重要的概念:
-
文档(
Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息 -
词条(
Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条
创建倒排索引是对正向索引的一种特殊处理和应用,流程如下:
- 先把文档内容进行分词,形成词条与文档ID的对应关系,叫做词条库,词条具备唯一性,建立索引
- 对搜索内容进行分词,把分词后得到一个关键词列表,根据关键词去词条库中匹配,再找到对应的文档ID列表
- 然后根据文档ID列表,找到对应的文档信息
正向和倒排
那么为什么一个叫做正向索引,一个叫做倒排索引呢?
-
正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
-
而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
那么两者方式的优缺点是什么呢?
正向索引:
-
优点:
-
可以给多个字段创建索引
-
根据索引字段搜索、排序速度非常快
-
-
缺点:
- 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
倒排索引:
-
优点:
- 根据词条搜索、模糊搜索时,速度非常快
-
缺点:
-
只能给词条创建索引,而不是字段
-
无法根据字段做排序
-

浙公网安备 33010602011771号