Elasticsearch(ES)核心知识点
1. 核心概念
- Document:文档,一条数据(JSON)
- Field:字段,文档里的属性
- Index:索引,相当于数据库的"库/表"
- Type:类型,7.x 已废弃,一个索引只对应一类数据
- Shard(分片):索引切分成多个分片,实现分布式存储与并发
- Replica(副本):分片的备份,保证高可用、提高查询吞吐量
- Node:节点,一个 ES 实例
- Cluster:集群,多个节点组成
- Master Node:主节点,管理集群元数据、分片分配
- Data Node:数据节点,存储数据、执行查询
- Coordinating Node:协调节点,接收请求、分发、聚合结果
- Segment:段文件,底层最小存储单位,不可变
- Translog:预写日志,防止宕机丢数据
2. 核心架构原理
- 索引被分为多个 主分片(Primary Shard)
- 每个主分片有多个 副本分片(Replica)
- 读写都走主分片,副本可分担查询
- 分片均匀分布在不同节点,实现水平扩展
3. 写入流程(极简)
- 数据先写 内存缓冲区
- 同时写 Translog(防止宕机丢失)
- 定时 refresh → 生成 segment,可被搜索
- 多次 segment 后台 merge 合并
- 定时 flush → 数据落盘,清空 Translog
4. 查询流程(极简)
- 请求发给协调节点
- 分发到对应分片
- 各分片返回匹配结果
- 协调节点聚合、排序、分页
- 返回最终结果
5. 分词(ES 核心能力)
- 对文本进行切词,用于全文检索
- 中文必须用:IK 分词器
ik_max_word:最细粒度拆分ik_smart:粗粒度拆分
6. 高可用机制
- 多节点 + 分片副本
- 某个节点挂掉:
- 对应分片的副本自动提升为主分片
- 集群自动 rebalance
- 无单点故障
7. 数据可靠性(防丢)
- Translog 保证写入不丢失
- 副本机制保证硬件故障不丢
- 底层基于 Lucene,持久化安全
8. 常见查询类型
- match:全文检索(分词后匹配)
- term:精确匹配(不分词)
- match_phrase:短语匹配
- range:范围查询
- bool:组合查询(must / should / must_not / filter)
- aggregation:聚合分析(分组、统计、去重)
9. 深度分页问题
from + size过大会深度翻页,性能极差- 解决方案:
- search_after(推荐,生产用)
- scroll`(适合大量导出)
10. 写入优化
- 批量写入:bulk
- 关闭刷新:加大 refresh_interval
- 副本数调为 0 后再恢复
- 合理设置分片数
11. 查询优化
- 避免
*前缀模糊查询 - 使用 filter 代替 query(不算分,缓存友好)
- 字段设置合理类型(keyword 不分词)
- 避免大结果集返回
- 利用路由(routing)定位分片
12. 脑裂问题(老生常谈)
-
原因:网络问题导致多个节点选主
-
解决:
discovery.zen.minimum_master_nodes: (master节点数/2)+1新版已内置更好的选举机制,基本不会出现。
13. 典型应用场景
- 搜索引擎(商城、APP 搜索)
- 日志分析(ELK)
- 用户行为分析
- 地理信息检索(附近的店)
- 报表聚合统计
14. 一句话背诵版
- 分片实现分布式,副本实现高可用
- 写入靠translog防丢,查询靠分词提速
- 全文检索用match,精确匹配用term
- 深度分页用search_after
- 大查询用filter,小结果用must