Elasticsearch 从入门到精通 · 综合学习路线图
图例 / 使用说明
- 蓝色:基础知识
- 绿色:工程与实践
- 橙色:性能与调优
- 红色:安全与风险
- 紫色:生态与高级主题 连线语义:
- 单箭头:前置依赖或推荐学习顺序
- 双向箭头:相互影响/对比 用法建议:
- 将每个卡片拆成独立笔记,挂在 MOC 中
- 与本库 [[∑ 技术与工具]]、PKM 方法论形成双链
Phase 1 · 基础认知与核心概念
Elasticsearch 是什么
- 分布式搜索与分析引擎
- 典型使用场景:日志检索、搜索框、监控分析
- 与关系型数据库的区别:Schema 灵活、倒排索引、近实时
- 与 OpenSearch 的关系与差异(可扩展独立卡片)
核心能力一览
- 全文检索:分词、相关度打分
- 结构化检索:精确匹配、范围过滤
- 聚合分析:近实时 OLAP 能力
- 分布式与高可用:多分片、多副本
- 可观测性:与 Kibana/可视化集成
学习路径导航(总览)
- 基础概念:索引、文档、分片、倒排索引
- 安装与基本操作:REST API、Kibana Console
- 查询 DSL:查询语法、过滤与分页
- 分析与聚合:指标、可视化
- 索引设计与分词:Mapping、Analyzer
- 集群与生产部署:多节点、高可用
- 性能优化与容量规划
- 安全、监控与运维
- 生态与高级能力:ES SQL、机器学习、向量搜索
- 实战案例与最佳实践
Phase 2 · 核心数据模型与倒排索引
文档 / 索引 / Type(历史概念)
- Document:JSON 文档,_id,_source
- Index:同一类型文档的逻辑集合
- Type:7.x 后废弃,了解历史即可 拆分建议:为每一类文档设计独立索引,而非“大杂烩索引”。
分片(Shard)与副本(Replica)
- Primary / Replica 的作用
- 分片数量对性能和资源的影响
- 常见误区:索引过多、小分片过多
- 原则:根据数据量和查询模式规划,而非拍脑袋。
倒排索引 Inverted Index
- 从“词 → 文档”的索引结构
- 与传统 B+ 树索引对比
- 有助理解:为什么分词、字段类型设计如此关键
Near Real-Time(近实时)
- Refresh Interval,默认 1s
- Segment、Flush 与 Merge 的基本流程
- 写入后不是立刻可见的原因
Phase 3 · 安装、工具与基础操作
安装方式与环境
- 单节点:本地开发环境
- Docker:快速启动与销毁
- 集群:基础配置(cluster.name, node.roles 等)
- 版本选择与 License 注意事项
常用工具
- Kibana Dev Tools / Console
- curl / HTTP 客户端
- Postman / VSCode REST Client 建议:将常用请求保存为脚本,纳入日常工作流。
基础 REST 操作
- 创建/删除索引:PUT/DELETE /index
- 文档 CRUD:PUT/POST/GET/DELETE /index/_doc/id
- _bulk:高效写入与常见错误
- _search:最小可用查询示例
Phase 4 · 查询 DSL 与搜索基础
查询 DSL 总览
- Query vs Filter:评分与缓存
- bool 查询:must / should / must_not / filter
- match / term / range / wildcard / prefix
- 分页:from + size vs search_after vs scroll(深分页问题)
相关度与排序
- BM25 基本思想
- _score 的含义
- 按字段排序 vs 按评分排序
- function_score:时间衰减、权重、业务因子
全文检索 vs 精确匹配
- match/multi_match:分词后匹配
- term/terms:适合 keyword、ID、枚举
- 常见 Bug:对 text 字段用 term 查询导致命中为 0
Phase 5 · 聚合分析与可观测性基础
Aggregation 基础
- bucket vs metric
- terms / range / date_histogram
- avg / sum / max / percentiles / cardinality
- 子聚合:按时间+维度做多层聚合
典型聚合场景
- 日志分析:错误率、接口耗时 P95/P99
- 业务指标:订单量、转化率
- 与可视化工具(Kibana、Grafana)结合
Phase 6 · Mapping 设计与分词策略
字段类型与 Mapping
- text vs keyword:分词与不分词
- numeric / date / boolean / ip
- nested / object:一对多、数组建模
- geo_point / geo_shape:地理位置
分词器与 Analyzer
- 分词器:standard、ik、smartcn 等
- 字符过滤器 / Token Filter
- 自定义 Analyzer:同义词、大小写、拼音
- 实践原则:先想清搜索体验再定分词方案
Mapping 常见坑
- 动态映射导致字段爆炸
- keyword 默认 256 长度限制
- 变更 Mapping 受限:需要重新索引
- 规范:预先设计模板与 index template
Phase 7 · 集群架构与生产部署
节点角色与拓扑
- master / data / ingest / coordinating
- 热-温-冷架构(Hot-Warm-Cold)
- 多机房 / 跨可用区部署原则
部署方式
- 自建集群:裸机、VM、K8s
- 官方/云托管:Elastic Cloud、各大云厂商托管版
- 基本运维动作:扩容、缩容、滚动升级
Phase 8 · 性能优化与容量规划
索引与数据建模优化
- 时间分区索引:按天/周/月
- 冷数据与生命周期管理(ILM)
- 控制字段数量,避免 mapping explosion
查询性能优化
- 优先使用 filter + keyword
- 避免通配符前缀 *xxx
- 使用 search_after 替代深分页
- profile API / explain 分析慢查询
资源与容量规划
- Heap、File Descriptor、磁盘 I/O
- Segment 合并的开销
- 使用监控数据回推容量模型
Phase 9 · 安全、监控与稳定性
安全基础
- 绝不要裸露 9200 到公网
- X-Pack Security / Open Distro 权限模型
- 用户/角色/索引级权限
- 审计日志与合规要求
监控与告警
- 节点健康:cluster health、pending tasks
- 索引健康:unassigned shards、段数量
- 性能指标:CPU、GC、I/O、慢查询日志
- 常见致命问题:集群红黄、脑裂、磁盘打满
Phase 10 · 高级功能与生态整合
Elasticsearch SQL 与 EQL
- 用类 SQL 方式查询索引
- 快速探索数据与报表
- 适合 BI 与临时查询场景
Ingest Pipeline
- 在写入前处理数据:解析日志、提取字段、掩码敏感信息
- 与 Logstash / Beats / Agent 配合
向量搜索与机器学习(高阶)
- dense_vector / knn search
- 将词向量/句向量引入召回
- 结合语义搜索与关键字搜索的混合方案
Phase 11 · 综合实战案例(建议拆分多页)
案例:日志与监控平台
- 采集:Filebeat/Fluentd → ES
- 索引设计:按服务+按日期
- 常用查询:错误率、慢请求
- 告警:基于聚合结果的阈值报警
案例:站内搜索/商品搜索
- 查询建议:自动补全、拼写纠错
- 排序策略:销量、时间、权重
- 分词与同义词管理
- AB Test:相关度调优闭环
案例:业务指标分析
- 订单明细入 ES
- 利用聚合做实时看板
- 与传统数仓的分工与互补
与本库的衔接建议
- 在 [[∑ 技术与工具]] 中添加指向本 Canvas 的入口
- 将每个主题拆为原子笔记:如「ES-倒排索引」「ES-BM25」「ES-分片策略」
- 使用 MOC:创建「∑ Elasticsearch」总览页,嵌入此 Canvas
- 与 PKM 方法论连接:将实战踩坑记录纳入常青笔记