第 1 章 · 旅程的起点:从一段文本到倒排索引 章节摘要:任何一段要被搜索的文本,都得先回答两个问题——引擎用什么结构记住它?它住在一个什么样的分布式世界里?本章用一次搜索事故引入倒排索引的直觉,画出节点、分片、副本的集群地图,再对比 JSON 文档模型与关系表模型的差别。读完你会知道 Elasticsearch 为什么"搜得快、装得下",以及它和数据库各自的边界在哪里——这决定了后面八章里 doc-1001 每一步的命运。 学习目标 阅读完本章,你应当能够: 用自己的话讲清倒排索引"词到文档"的映射方向,并解释它为什么比逐行扫描快。 画出集群、节点、索引、分片、副本的包含关系图,说出主分片数为什么建好后不能改。
章节摘要:任何一段要被搜索的文本,都得先回答两个问题——引擎用什么结构记住它?它住在一个什么样的分布式世界里?本章用一次搜索事故引入倒排索引的直觉,画出节点、分片、副本的集群地图,再对比 JSON 文档模型与关系表模型的差别。读完你会知道 Elasticsearch 为什么"搜得快、装得下",以及它和数据库各自的边界在哪里——这决定了后面八章里 doc-1001 每一步的命运。
阅读完本章,你应当能够:
金句:数据库按行回答"这条记录是什么",倒排索引按词回答"哪些记录里有它"——搜索的本质是后一个问题。
从一次像搜索的事故出发,讲清正排与倒排两种结构的差别,再看分词如何决定倒排表里到底有哪些词。这是全书的智识地基,后面每一次"搜不到"都能追回到这一节。
单个节点装不下、也挂不起的时候,就需要分片与副本。这一节把分布式词汇一次性理顺:主分片数为什么建索引时就要定好、副本怎么提供高可用、协调节点在中间扮演什么角色。
同样的工单数据,关系模型存成三张表,文档模型存成一条嵌套 JSON。这一节对比两种建模思路的代价,并给出技术选型的判断框架,避免"手里拿锤子看什么都是钉子"。
三节的关系是"结构、容器、内容":先认识引擎内部的数据结构(倒排索引),再认识承载它的分布式容器(集群与分片),最后认识装进容器的内容形态(JSON 文档)。顺序不可颠倒——不理解倒排索引,就无法理解分片本质上是一份独立的 Lucene 索引。
1.1 倒排索引结构 ──► 1.2 分片 = 独立的Lucene索引 ──► 1.3 文档模型与选型 │ │ │ └─► 第3章 分词 └─► 第4章 路由 └─► 第7章 嵌套建模
学完本章,用下面五个考核点自测,答不上来的回对应小节重读:
| 考核点 | 达标标准 | 对应小节 |
|---|---|---|
| 讲清倒排方向 | 能手画"词到文档"的表,并解释模糊查询在数据库里为何退化为全表扫描 | 1.1 |
| 手算迷你倒排表 | 给三条样例文档与切词结果,写出词典与倒排列表 | 1.1 |
| 画出集群包含图 | 集群、节点、索引、主分片、副本五层关系不错位 | 1.2 |
| 解释分片数不可改 | 用路由公式的取余运算说明改数后老文档"失踪"的机理 | 1.2 |
| 选型判断 | 对给定业务场景给出"数据库还是搜索引擎"的结论与两条理由 | 1.3 |