美文网首页
3. ES入门 - 倒排索引

3. ES入门 - 倒排索引

作者: 右耳菌 | 来源:发表于2025-11-16 08:37 被阅读0次

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

1.正向索引

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


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

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

那搜索的大概流程如图:


说明:

  • 1)检查到搜索条件为like '%手机%',需要找到title中包含手机的数据
  • 2)逐条遍历每行数据(每个叶子节点),比如第1次拿到id为1的数据
  • 3)判断数据中的title字段值是否符合条件
  • 4)如果符合则放入结果集,不符合则丢弃
  • 5)回到步骤1

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

2. 倒排索引

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

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

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

  • 将每一个文档的数据利用分词算法根据语义拆分,得到一个个词条
  • 创建表,每行数据包括词条、词条所在文档id、位置等信息
  • 因为词条唯一性,可以给词条创建正向索引
    此时形成的这张以词条为索引的表,就是倒排索引表,两者对比如下:

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


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

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

3. 正向和倒排

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

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
  • 而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。

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

正向索引:

  • 优点:
    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:
    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引:

  • 优点:
    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:
    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

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

相关文章

  • ES

    ES 三大操作: 构建索引、检索数据、聚合数据 ES 特性: 分布式、倒排索引、近实时、相似精度 适用场景: 倒排...

  • ES倒排索引

    1.核心组成 单词词典(Term Dictionry)记录所有的文档单词,记录单词到倒排列表的关联关系。一般比较大...

  • Elasticsearch中ik分词器的使用

    1.ES分词简介 Elasticsearch是基于倒排索引来实现搜索功能,而倒排索引的基础就是分词。因此分词对于学...

  • es概念

    文档地址:https://es.xiaoleilu.com/ 倒排索引 对比: 正排索引 文档id到文档内容和...

  • elasticsearch head 日常操作

    前言 elasticsearch 下文简称es,本文基于es6所书写。 es作为非关系型数据库,基于倒排索引,集群...

  • Elasticsearch精学笔记(一)

    一、理解ES数据层和倒排索引: 一个 Elasticsearch 集群可以包含多个索引,相应的每个索引可以包含多个...

  • es原理--两篇文章

    infoQ讲解倒排索引 博客园讲解压缩原理,以及es搜索原理

  • Elasticsearch-基础使用

    零、本文纲要 一、认识Elasticsearch二、倒排索引三、ES的部分概念四、安装ES、Kibana、分词器五...

  • Elasticsearch(一):概念与基本API

    安装 Elasticsearch 常用 API index Document 倒排索引与分词 倒排索引 倒排索引与...

  • es (7.7.1)与springboot整合

    使用es的原因 es 基于内存的倒排索引算法,能够快速进行数据的索引 使用场景 1、本人在测试中实现了(vue) ...

网友评论

      本文标题:3. ES入门 - 倒排索引

      本文链接:https://www.haomeiwen.com/subject/cuudbjtx.html