全书目录

第二十三篇:Elasticsearch 完全指南 —— 全城检索雷达宇宙

第三章:真正的核心心智 —— 什么叫倒排索引

1 分钟 249 字 第 419 / 962 个阅读单元

如果这一篇你只想记住一个概念,那就是:倒排索引

普通数据库里,你更习惯这样想:

text
文档 -> 字段值

而 Elasticsearch 搜索时真正依赖的,是反过来的结构:

text
词项 -> 出现在哪些文档里

这就是“倒排”。

假设有三份文档:

text
Doc 1: "wireless noise cancelling headphones"
Doc 2: "wireless bluetooth speaker"
Doc 3: "office noise reduction panel"

如果按正向看,是这样:

text
Doc 1 -> wireless, noise, cancelling, headphones
Doc 2 -> wireless, bluetooth, speaker
Doc 3 -> office, noise, reduction, panel

而倒排索引更像这样:

text
wireless   -> Doc 1, Doc 2
noise      -> Doc 1, Doc 3
cancelling -> Doc 1
headphones -> Doc 1
bluetooth  -> Doc 2
speaker    -> Doc 2
office     -> Doc 3
reduction  -> Doc 3
panel      -> Doc 3

于是当用户搜 noise wireless 时,雷达中心不是去一份份翻全文,而是直接:

text
找词项 wireless -> Doc 1, Doc 2
找词项 noise    -> Doc 1, Doc 3
合并候选集合     -> Doc 1, Doc 2, Doc 3
再根据匹配情况排序 -> Doc 1 最相关

这就是 Elasticsearch 能把全文检索做得又快又像“搜索”的原因。

你可以把它理解成:

text
普通目录:文档编号 -> 里面有哪些词
倒排目录:词 -> 它出现在哪些文档

搜索系统最重要的,不是“我存了什么”,而是“我能不能按线索反向秒查到文档”。