如果这一篇你只想记住一个概念,那就是:倒排索引。
普通数据库里,你更习惯这样想:
文档 -> 字段值而 Elasticsearch 搜索时真正依赖的,是反过来的结构:
词项 -> 出现在哪些文档里这就是“倒排”。
假设有三份文档:
Doc 1: "wireless noise cancelling headphones"
Doc 2: "wireless bluetooth speaker"
Doc 3: "office noise reduction panel"如果按正向看,是这样:
Doc 1 -> wireless, noise, cancelling, headphones
Doc 2 -> wireless, bluetooth, speaker
Doc 3 -> office, noise, reduction, panel而倒排索引更像这样:
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 时,雷达中心不是去一份份翻全文,而是直接:
找词项 wireless -> Doc 1, Doc 2
找词项 noise -> Doc 1, Doc 3
合并候选集合 -> Doc 1, Doc 2, Doc 3
再根据匹配情况排序 -> Doc 1 最相关这就是 Elasticsearch 能把全文检索做得又快又像“搜索”的原因。
你可以把它理解成:
普通目录:文档编号 -> 里面有哪些词
倒排目录:词 -> 它出现在哪些文档搜索系统最重要的,不是“我存了什么”,而是“我能不能按线索反向秒查到文档”。