STEP_1
倒排索引存储的不只是文档 ID,还有词频(TF:该词在文档中出现的次数)和位置信息(用于短语查询)。Lucene(ES 底层)使用跳跃表(Skip List)压缩倒排列表,使大倒排列表的合并操作从 O(n) 降到 O(log n),这是高性能搜索的关键。搜索引擎的核心数据结构 — PROCESSING
inverted-index.log
// 倒排索引结构
// 文档:
// Doc 1: "Elasticsearch 是分布式搜索引擎"
// Doc 2: "搜索引擎使用倒排索引"
// Doc 3: "Elasticsearch 使用 Lucene 倒排索引"
// 分词后的倒排索引:
const invertedIndex = {
'elasticsearch': [
{ docId: 1, positions: [0], freq: 1 },
{ docId: 3, positions: [0], freq: 1 }
],
'搜索引擎': [
{ docId: 1, positions: [2], freq: 1 },
{ docId: 2, positions: [0], freq: 1 }
],
'倒排索引': [
{ docId: 2, positions: [2], freq: 1 },
{ docId: 3, positions: [3], freq: 1 }
]
}
// 查询:"elasticsearch 倒排索引"
// 1. 分词:["elasticsearch", "倒排索引"]
// 2. 查倒排索引:
// "elasticsearch" → [Doc1, Doc3]
// "倒排索引" → [Doc2, Doc3]
// 3. 求交集(AND)或并集(OR)
// 4. Doc3 同时包含两个词 → 相关度最高倒排索引:正排索引:文档 → 词语列表(快速找到某文档包含哪些词)。倒排索引:词语 → 文档列表(快速找到包含某词的所有文档)。搜索需要的是倒排索引。每个词项(term)对应一个倒排列表(posting list),记录该词出现在哪些文档的哪些位置。
实时沙盒SANDBOX
NOMINAL
快速场景
手动调节
主分片数
影响并行度和运维复杂度
5个
分片数适中,并行搜索效率高
副本数
影响读吞吐和存储成本
1个
1 副本:高可用 + 读吞吐翻倍
分词器
影响搜索质量和索引大小
IK 中文分词,适合中文内容平台