Elasticsearch 核心原理:正向索引 vs 倒排索引
- 一、前言
- 二、什么是正向索引(Forward Index)?
- 2.1 定义
- 2.2 通俗理解
- 2.3 正向索引结构示例
- 2.4 正向索引的问题
- 三、什么是倒排索引(Inverted Index)?
- 3.1 定义
- 3.2 通俗理解
- 3.3 倒排索引结构示例
- 3.4 倒排索引优势
- 四、正向索引 vs 倒排索引 流程图对比
- 4.1 正向索引查询流程(慢)
- 4.2 倒排索引查询流程(快)
- 五、正向索引 vs 倒排索引 核心区别(重点表)
- 六、一句话彻底搞懂
- 正向索引:
- 倒排索引:
- 七、Elasticsearch 如何使用两者?
- 7.1 ES 使用 **倒排索引**
- 7.2 ES 同时保留 **正向索引**
- 7.3 ES 最终架构
- 八、总结(超级好记)
🌺The Begin🌺点点关注,收藏不迷路🌺 |
一、前言
正向索引和倒排索引是搜索引擎最核心的两个数据结构,也是 Elasticsearch 为什么能秒级搜索海量数据的关键。
90% 的新手都搞不懂:
- 正向索引是什么?
- 倒排索引是什么?
- 为什么 ES 非要用倒排索引?
本文用最简单的例子、流程图、对比表,让你彻底理解这两个底层概念。
二、什么是正向索引(Forward Index)?
2.1 定义
正向索引 = 按文档ID找关键词
是数据库最传统的存储方式:
先找到文档,再看里面包含什么词。
2.2 通俗理解
正向索引就像书的页码目录:
- 文档ID = 页码
- 内容 = 页面里的文字
你想查“ES”在哪一页,必须一页一页翻,效率极低。
2.3 正向索引结构示例
| 文档ID (DocID) | 文档内容(标题) |
|---|---|
| 1 | Elasticsearch 入门教程 |
| 2 | Solr 与 Elasticsearch 区别 |
| 3 | Lucene 倒排索引详解 |
2.4 正向索引的问题
想搜索**“Elasticsearch”**
必须遍历所有文档,逐个判断是否包含关键词
数据量大时,速度极慢!
三、什么是倒排索引(Inverted Index)?
3.1 定义
倒排索引 = 按关键词找文档ID
是搜索引擎的核心结构:
先找到关键词,直接拿到所有包含它的文档。
3.2 通俗理解
倒排索引就像书最后的索引表:
- 关键词 = 词汇
- 文档ID = 出现的页码
想查“Elasticsearch”,直接查表,立刻知道在文档1、2中出现。
3.3 倒排索引结构示例
| 关键词(Term) | 包含该词的文档ID (Posting List) |
|---|---|
| Elasticsearch | 1, 2 |
| Solr | 2 |
| Lucene | 3 |
| 倒排索引 | 3 |
3.4 倒排索引优势
搜索**“Elasticsearch”**
直接定位关键词 → 瞬间拿到文档ID → 返回结果
毫秒级响应!
四、正向索引 vs 倒排索引 流程图对比
4.1 正向索引查询流程(慢)
4.2 倒排索引查询流程(快)
五、正向索引 vs 倒排索引 核心区别(重点表)
| 维度 | 正向索引 Forward Index | 倒排索引 Inverted Index |
|---|---|---|
| 查询方向 | 文档ID → 关键词 | 关键词 → 文档ID |
| 结构 | 文档 -> 词语 | 词语 -> 文档 |
| 查询速度 | 慢(全表扫描) | 极快(直接定位) |
| 实现方式 | MySQL、普通数据库 | Elasticsearch、Solr |
| 适用场景 | 根据ID查数据、统计、更新 | 全文检索、关键词搜索 |
| 优点 | 更新、修改方便 | 搜索速度极快 |
| 缺点 | 搜索极慢 | 更新、删除稍慢 |
六、一句话彻底搞懂
正向索引:
我知道文档ID,想知道文档里有什么。
(适合:根据ID查询、更新数据)
倒排索引:
我知道关键词,想知道哪些文档包含它。
(适合:全文搜索、关键词检索)
七、Elasticsearch 如何使用两者?
7.1 ES 使用倒排索引
- 实现快速关键词搜索
- 这是 ES 作为搜索引擎的核心
7.2 ES 同时保留正向索引
- 存储原始
_source文档 - 用于:根据ID获取文档、更新、删除
7.3 ES 最终架构
八、总结(超级好记)
- 正向索引:文档 → 词语,根据ID找内容,数据库用。
- 倒排索引:词语 → 文档,根据关键词找ID,ES 用。
- 倒排索引是 ES 快的核心原因!
- ES同时使用两者:倒排索引用搜索,正向索引用取数据。
🌺The End🌺点点关注,收藏不迷路🌺 |