Elasticsearch 从入门到精通 · 综合学习路线图

图例 / 使用说明

  • 蓝色:基础知识
  • 绿色:工程与实践
  • 橙色:性能与调优
  • 红色:安全与风险
  • 紫色:生态与高级主题 连线语义:
  • 单箭头:前置依赖或推荐学习顺序
  • 双向箭头:相互影响/对比 用法建议:
  • 将每个卡片拆成独立笔记,挂在 MOC 中
  • 与本库 [[∑ 技术与工具]]、PKM 方法论形成双链

Phase 1 · 基础认知与核心概念

Elasticsearch 是什么

  • 分布式搜索与分析引擎
  • 典型使用场景:日志检索、搜索框、监控分析
  • 与关系型数据库的区别:Schema 灵活、倒排索引、近实时
  • 与 OpenSearch 的关系与差异(可扩展独立卡片)

核心能力一览

  • 全文检索:分词、相关度打分
  • 结构化检索:精确匹配、范围过滤
  • 聚合分析:近实时 OLAP 能力
  • 分布式与高可用:多分片、多副本
  • 可观测性:与 Kibana/可视化集成

学习路径导航(总览)

  1. 基础概念:索引、文档、分片、倒排索引
  2. 安装与基本操作:REST API、Kibana Console
  3. 查询 DSL:查询语法、过滤与分页
  4. 分析与聚合:指标、可视化
  5. 索引设计与分词:Mapping、Analyzer
  6. 集群与生产部署:多节点、高可用
  7. 性能优化与容量规划
  8. 安全、监控与运维
  9. 生态与高级能力:ES SQL、机器学习、向量搜索
  10. 实战案例与最佳实践

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 方法论连接:将实战踩坑记录纳入常青笔记