Type: concept
Confidence: 0.95
Created: 2026-04-16
Updated: 2026-04-16
Tags: AI工程

倒排索引

概述

倒排索引(Inverted Index)是搜索引擎的核心数据结构:将词条→文档的映射颠倒为词条→包含该词条的文档列表,使查询从 O(N) 全表扫描降至 O(1) 词典查找 + O(k) 遍历。

关键内容

  1. 核心结构三层
  2. 词典(Term Dictionary):内存驻留,term → (term_id, df, offset),支持快速查找。实现方式:哈希表(O(1) 精确查找)、B+树(支持范围查询)、Trie(前缀匹配)、FST(Lucene 用,共享前缀+后缀,最省空间)。
  3. Posting Lists:磁盘存储,按需加载。每个词条的文档列表,按 doc_id 升序排列。
  4. 文档元数据:文档长度(BM25 必需)、字段信息。

  5. Posting 三种粒度

  6. 基础(doc_id only):布尔检索
  7. 带词频(doc_id + tf):TF-IDF / BM25 评分
  8. 带位置(doc_id + tf + positions):短语查询、近邻查询

  9. 差值编码(Delta Encoding):Posting list 的 doc_id 有序升序,存储差值而非原值(差值通常远小于原值),配合变长编码大幅压缩,详见索引压缩

  10. 构建算法

  11. BIIP:小规模,完全装入内存
  12. SPIMI(Single-Pass In-Memory Indexing):大规模,O(T) 时间,分批写出临时块再归并,比基于排序的 BSBI 更快
  13. MapReduce:超大规模分布式,Map 阶段 emit (term, (doc_id, tf)),Reduce 阶段排序生成 Posting List

  14. Posting 合并算法:AND 查询用双指针交集 O(|p1|+|p2|);Skip Pointers 跳表加速大 posting list 合并(每隔 √n 设跳指针)。

  15. 索引更新策略:全量重建(简单但延迟高);增量索引(主索引+辅助索引,定期合并);NRT 近实时(Elasticsearch:1s Refresh → 内存 Segment 可搜索,30min Flush 持久化)。

来源

相关