3. ES入门 - 倒排索引

2025-11-16  本文已影响0人  右耳菌

elasticsearch之所以有如此高性能的搜索表现,正是得益于底层的倒排索引技术。那么什么是倒排索引呢?
倒排索引的概念是基于MySQL这样的正向索引而言的。

1.正向索引

我们先来回顾一下正向索引。
例如有一张名为tb_goods的表:


其中的id字段已经创建了索引,由于索引底层采用了B+树结构,因此我们根据id搜索的速度会非常快。但是其他字段例如title,只在叶子节点上存在。
因此要根据title搜索的时候只能遍历树中的每一个叶子节点,判断title数据是否符合要求。
比如用户的SQL语句为:

select * from tb_goods where title like '%手机%';

那搜索的大概流程如图:


说明:

综上,根据id精确匹配时,可以走索引,查询效率较高。而当搜索条件为模糊匹配时,由于索引无法生效,导致从索引查询退化为全表扫描,效率很差。
因此,正向索引适合于根据索引字段的精确搜索,不适合基于部分词条的模糊匹配。
而倒排索引恰好解决的就是根据部分词条模糊匹配的问题。

2. 倒排索引

倒排索引中有两个非常重要的概念:

创建倒排索引是对正向索引的一种特殊处理和应用,流程如下:

倒排索引的搜索流程如下(以搜索"华为手机"为例),如图:


流程描述:
1)用户输入条件"华为手机"进行搜索。
2)对用户输入条件分词,得到词条:华为、手机。
3)拿着词条在倒排索引中查找(由于词条有索引,查询效率很高),即可得到包含词条的文档id:1、2、3。
4)拿着文档id到正向索引中查找具体文档即可(由于id也有索引,查询效率也很高)。

虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

3. 正向和倒排

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

是不是恰好反过来了?
那么两者方式的优缺点是什么呢?

正向索引:

倒排索引:


如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~

上一篇 下一篇

猜你喜欢

热点阅读