正向索引和倒排索引
正向索引
- mysql 就是采用的正向索引。
倒排索引
- 倒排索引重要概念:
- 文档(
Document
):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息。 - 词条(
Term
):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条。
- 文档(
- 创建倒排索引是对正向索引的一种特殊处理:
- 将每一个文档的数据利用算法分词,得到一个个词条。
- 创建表,每行数据包括词条、词条所在文档id、位置等信息。
- 因为词条唯一性,可以给词条创建索引,例如hash表结构索引。
- 搜索流程:
- 虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。
正向和倒排
- 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
- 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
- 正向索引优缺点:
- 优点:可以给多个字段创建索引;根据索引字段搜索、排序速度非常快。
- 缺点:根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
- 倒排索引优缺点:
- 优点:根据词条搜索、模糊搜索时,速度非常快。
- 只能给词条创建索引,而不是字段;无法根据字段做排序。