跳转到内容

倒排索引


倒排索引(Inverted Index)是一种高效的数据结构,主要用于全文搜索。它的核心思想是 建立从词(Term)到文档(Document)的映射关系,从而加速查询过程。

在传统的正向索引中,文档会被存储为 文档ID → 词列表 的形式,例如:

1: 华为手机
2: 小米手机
3: 苹果电脑
id(主键)titleprice
1华为手机6499
2小米手机4399
3苹果电脑12999

如果要查找包含“手机”的所有信息,必须遍历所有文档并检查其中是否包含该词,效率较低,而且,如果title没有添加索引其效率更低。
画板

倒序索引(Reverse Index)是一种特殊的索引结构,通常用于优化某些特定的查询操作。它的核心思想是将数据的顺序反转存储,从而在某些场景下提高查询效率。倒序索引广泛应用于数据库、搜索引擎、字符串处理等领域。

  • 文档(Document):文档是搜索引擎或数据库中的基本存储单元,它通常是一个结构化的数据对象。
    1. 一个网页(搜索引擎);
    2. 一篇文章(文档检索);
    3. 一条日志记录(日志分析);
    4. 一条数据库记录(数据库搜索)。

在 Elasticsearch 中,文档通常以JSON 格式存储,例如

{
"id": 1,
"title": "今天天气很好",
"content": "今天阳光明媚,适合出去散步"
}

每个文档都有一个唯一的 文档 ID,用于在倒排索引中建立映射关系

  • 词条(Term):词条是索引中的最小单位,通常指的是经过分词处理后的关键词。例如,在搜索引擎中,用户查询“天气很好”,分词后可能得到两个词条:“天气”和“很好”。

倒排索引的核心作用是建立词条 → 文档的映射。

原始文档:

文档1:今天 天气 很好 适合 散步
文档2:今天 适合 读书
文档3:天气 炎热 适合 游泳

倒排索引(简化表示):

今天 → [文档1, 文档2]
天气 → [文档1, 文档3]
适合 → [文档1, 文档2, 文档3]
很好 → [文档1]
散步 → [文档1]
读书 → [文档2]
炎热 → [文档3]
游泳 → [文档3]
  • 如果查询“天气”,系统直接返回 [文档1, 文档3],而不需要遍历所有文档。
  • 查询“适合”时,会返回 [文档1, 文档2, 文档3]。

这样,当搜索“适合”时,只需查找索引表,即可快速找到相关文档,避免逐一扫描所有文档,提高查询效率。