Elasticsearch 搜索引擎核心¶
学习目标:从"会用 ES 查询"升级到"理解原理 → 能设计索引方案 → 能排查性能问题"
检验标准:学完每个模块后,能口述"这个技术解决了什么问题?不用它会怎样?工作中有哪些坑?"
整体知识地图¶
mindmap
root((Elasticsearch 知识体系))
基础概念
Index / Document / Field
Mapping / Shard / Replica
与关系型数据库的对应关系
核心原理
倒排索引
正排 vs 倒排
构建过程
FST 与压缩算法
分词器
Analyzer 组成
IK 中文分词
查询与聚合
查询 DSL
query / filter context
bool 查询
聚合查询
Bucket / Metric / Pipeline
Mapping 设计
字段类型
text vs keyword
动态 Mapping 的坑
集群与架构
集群架构
分片机制
集群健康状态
性能与运维
写入优化
查询优化
深度分页与 search_after
数据一致性 知识点导航¶
| # | 知识点 | 核心一句话 | 详细文档 |
|---|---|---|---|
| 01 | 引入与背景 | ES 解决全文搜索和复杂聚合问题,MySQL LIKE 全表扫描无法胜任 | 引入与背景 |
| 02 | 核心概念 | Index≈数据库,Document≈行,Field≈列,Shard 实现水平扩展 | 核心概念 |
| 03 | 倒排索引 | 正排按文档找词,倒排按词找文档,比 LIKE 快几个数量级 | 倒排索引 |
| 04 | Mapping 设计 | text 分词可搜索,keyword 精确匹配可聚合,动态 Mapping 需谨慎 | Mapping映射设计 |
| 05 | 查询 DSL | query 计算相关性得分,filter 只过滤不评分且可缓存,性能更优 | 查询语法DSL |
| 06 | 集群架构与分片 | 主分片数创建后不可修改,副本分片提供高可用和读扩展 | 集群架构与分片机制 |
| 07 | 性能优化 | 写入用 bulk 批量,查询用 filter 缓存,深分页用 search_after | 性能优化 |
| 08 | 数据一致性 | MySQL 与 ES 同步方案:Canal 监听 binlog 最可靠,双写有一致性风险 | 数据一致性 |
| 09 | 聚合查询 | Bucket 分桶 + Metric 计算 + Pipeline 二次分析,类似 SQL GROUP BY 但更强大 | 聚合查询 |
| 10 | 分词器与中文分词 | Analyzer = Char Filter + Tokenizer + Token Filter,中文用 IK 分词器 | 分词器与中文分词 |
高频问题索引¶
| 问题 | 详见 |
|---|---|
| 倒排索引和 B+ 树索引的区别? | 倒排索引 |
| text 和 keyword 有什么区别? | Mapping映射设计 |
| query 和 filter 有什么区别? | 查询DSL |
| 写入数据后为什么不能立即查到? | 性能优化 |
| 如何保证 MySQL 和 ES 的数据一致性? | 数据一致性 |
| 为什么主分片数创建后不可修改? | 集群架构与分片机制 |
| 深度分页怎么优化? | 性能优化 |
| ES 聚合和 SQL GROUP BY 有什么区别? | 聚合查询 |
| 为什么 standard 分词器对中文效果差? | 分词器与中文分词 |
| ik_max_word 和 ik_smart 怎么选? | 分词器与中文分词 |
一句话口诀¶
ES 靠倒排索引做全文检索,靠 Mapping 定义字段类型,靠 bool 查询组合条件,靠 filter 提升性能,靠分片水平扩展,靠 search_after 解决深度分页。