大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
核心概念
Elasticsearch 用 近关系 的术语组织数据:Index 像「库表」,Document 像「行」,但底层是 JSON 文档 + 倒排索引,无 JOIN。
学习目标
- 掌握 Index、Document、Mapping、Shard、Replica、Node
- 理解 Cluster 健康状态与分片路由直觉
- 对照 MySQL 表模型,避免把 ES 当 RDBMS 用
核心内容
术语对照
| ES | 直觉类比 | MySQL(本站) |
|---|---|---|
| Cluster | 整个 ES 部署 | 实例 + 库集合 |
| Node | 单台 ES 进程 | mysqld 进程 |
| Index | 逻辑命名空间 | database.table |
| Document | 一条 JSON | 一行 |
| Mapping | 字段类型/schema | DDL |
| Shard | 水平分片 | 分库分表片 |
| Replica | 副本分片 | 读副本 |
Index 与 Document
# 索引一条「课程」文档(实验 index 名 tracks)
curl -X PUT "localhost:9200/tracks/_doc/spring-boot-essentials" -H "Content-Type: application/json" -d '
{
"slug": "spring-boot-essentials",
"title": "Spring Boot 入门",
"category": "backend",
"summary": "IoC、Web、JPA 与 MySQL 集成"
}'
_id 可指定为 slug,便于与 MySQL cf_track.slug 对齐;权威字段仍以 MySQL 为准。
Shard 与 Replica
Index "tracks"
├── Primary Shard 0 → Replica 0
└── Primary Shard 1 → Replica 1
- Primary Shard:写入路由目标,创建 index 时数量固定(默认 1,生产需规划)
- Replica:副本,提升读吞吐与容错;主分片挂掉时提升副本为主
单节点 Docker 实验通常 number_of_replicas: 0;集群内至少 1 副本才有 HA 意义。
Cluster 健康
curl -s "localhost:9200/_cluster/health?pretty"
# green : 所有主/副本可用
# yellow : 主分片 OK,副本未分配(单节点常见)
# red : 部分主分片不可用,需排查
与 MySQL / Mongo 的关系
- MySQL
cf_track:事务、外键、REST/tracks数据源(spring-boot-essentials) - MongoDB:嵌套文档、高写入日志(mongodb-essentials)
- ES:从上述库 同步 可搜索快照,见 es-sync
练习
- 画出 Cluster → Node → Index → Shard 层级图
- 解释单节点为何
_cluster/health常为 yellow - 对照
schema.sql中cf_track列,列出哪些适合进 ES 文档
小结
Document 存 JSON,Shard 做水平切分,Replica 保可用。 下一课 Docker 启动单节点 ES。