Elasticsearch 倒排索引
核心定义
倒排索引是 ES 底层核心数据结构,作用是根据关键词快速找到对应文档,是 ES 检索速度快的根本原因。
对比正向索引:
- 正向索引 like 该文档包含哪些词
缺点:检索要遍历全部文档,速度极慢 - 倒排索引:中间表 → 包含该词的所有文档ID
优点:先查词,直接锁定文档,检索高效
示例
| 文档ID | 文档内容 |
|---|---|
| 1 | 深入理解 Java 核心技术 |
| 2 | 深入理解 Java 虚拟机 |
| 3 | Java 编程思想 |
步骤1:分词
用分词器把文本切割为最小检索单元,示例分词结果:深入、理解、Java、核心、技术、虚拟机、编程、思想
步骤2:生成倒排表
以词条为键,存储出现过该词的文档ID
| 词条 | 对应文档ID |
|---|---|
| 深入 | 1,2 |
| 理解 | 1,2 |
| Java | 1,2,3 |
| 核心 | 1 |
| 技术 | 1 |
| 虚拟机 | 2 |
| 编程 | 3 |
| 思想 | 3 |
倒排索引的优势
- 查询速度快:直接通过词条匹配文档,无需全量扫描,这是核心
- 支持各类复杂检索:短语匹配、模糊查询、通配符等
- 聚合统计高效:方便统计词频、分组聚合
- 存储占用低:底层通过 VB Encoding、Simple9 等算法压缩存储
执行流程大致意思
- 检索关键词:Java
流程:查询倒排表词条Java → 获取文档 1、2、3 - 检索关键词:虚拟机
流程:查询倒排表词条虚拟机 → 获取文档 2