Elasticsearch 基础入门知识
Elasticsearch 基础入门知识
一、ES 核心简介
Elasticsearch(简称 ES)是一款基于 Lucene 开发的分布式、近实时全文检索引擎,主打海量数据的全文搜索、模糊检索、聚合统计。
核心特性:分布式高可用、无Schema文档存储、近实时写入、海量数据检索与聚合、RESTful API 操作
常用技术栈 ELK:
-
Elasticsearch:数据存储、检索、聚合分析(核心)
-
Logstash:数据采集、清洗、过滤
-
Kibana:可视化控制台、集群监控、数据展示
二、ES 核心概念通俗对照(重点记忆)
结合 MySQL、MongoDB 对比,彻底打通认知壁垒
| ES 概念 | MySQL 对应 | MongoDB 对应 | 核心作用 |
|---|---|---|---|
| Index 索引 | 一张数据表 | Collection 集合 | 存储同类结构化/文档数据的容器 |
| Document 文档 | 一行数据 | Document 文档 | ES 最小数据单元,JSON 格式 |
| Field 字段 | 列 | 字段 | 单条文档的属性(key-value) |
| Mapping 映射 | 建表语句(DDL) | Schema 约束 | 定义字段类型、分词规则、索引属性 |
| Primary Shard 主分片 | 自动分表 | 分片数据块 | 拆分大索引,分布式存储,数据不重复 |
| Replica Shard 副本分片 | 分表备份 | 副本集 | 主分片备份,容灾、提升查询并发 |
三、核心概念深度详解
1. Index 索引(表/集合)
存放同类型文档数据的逻辑容器,是业务操作的核心单元。
-
新版 ES 日志场景推荐使用 Data Stream 数据流 替代普通索引
-
不存储跨业务数据,类似 MySQL 单表、Mongo 单集合
2. Mapping 映射(建表规则)
ES 的「字段规则定义器」,约束所有字段的存储和检索特性,生产环境必须手动定义,禁止纯动态映射。
两大核心字段类型(面试必考)
-
text(分词类型)
-
写入数据自动分词拆分(例:ES教程 → es、教程)
-
适用:标题、内容、描述、全文检索场景
-
不支持:精确匹配、排序、分组聚合
-
-
keyword(不分词类型)
-
完整字符串存储,不拆分
-
适用:手机号、标签、状态、用户名、精确匹配
-
支持:精确查询、排序、分组、聚合
-
其他常用类型:integer、long、double、date、boolean、object(嵌套对象)、array(数组)
3. Shard 分片(核心重点)
索引数据过大时,自动拆分的最小存储单元,实现分布式存储,解决单机器容量、性能瓶颈。
(1)主分片 Primary Shard
-
核心规则:创建索引时数量固定,永久不可直接修改
-
原理:数据路由公式
shardId = hash(_id) % 主分片数,改数量会导致数据路由错乱、数据丢失 -
特性:多个主分片数据完全不重复,均匀拆分整表数据
-
所有写入操作,仅在主分片执行
(2)副本分片 Replica Shard
-
核心规则:数量可随时动态增加、减少
-
本质:对应主分片的完整备份,数据和主分片一模一样
-
两大作用:
-
容灾容错:主分片节点宕机,副本自动升级为主分片,数据不丢失
-
提升查询性能:读请求可分摊到主分片+所有副本分片
-
-
硬性机制:同一个分片的主、副本绝不放在同一台节点,避免单机宕机双丢
分片计算公式
总分片实体数 = 主分片数 × (副本数 + 1)
示例:3主1副本 → 3×2=6个分片实体
行业最佳实践
单个分片数据大小控制在 10G~50G
-
分片过大:段合并、故障恢复、查询速度极慢
-
分片过小:分片数量爆炸,占用大量内存存储元数据,集群卡顿
4. Document 文档
-
ES 最小数据存储单元,天然 JSON 格式,无固定 Schema
-
每条文档拥有唯一
_id(可自定义/ES自动生成) -
一条文档只会存在于「一个主分片 + 其对应副本」中,不会分散到其他分片
四、集群与节点基础
1. 核心概念
-
Cluster 集群:多台 ES 节点组成的整体,统一对外提供服务
-
Node 节点:集群中的单台 ES 进程
2. 节点三大角色
-
主节点(Master):管理集群元数据(创建/删除索引、分片分配、节点上下线),不处理读写业务压力
-
数据节点(Data):存储分片数据,执行写入、查询、聚合、排序,承载核心业务压力
-
协调节点:所有节点默认具备,接收客户端请求、分发分片任务、汇总结果返回前端
3. 集群三色状态(面试高频)
-
绿色(Green):所有主、副本分片正常分配,集群健康、数据安全
-
黄色(Yellow):主分片全部正常,部分副本分片未分配,数据不丢,但无备份,存在宕机风险
-
红色(Red):存在主分片丢失,部分数据无法读写,集群异常
五、ES 近实时读写核心机制(区别数据库的关键)
ES 写入数据不是立刻可搜索,默认 1 秒延迟,核心靠三大机制实现
1. Refresh 刷新(可搜索)
-
默认 1秒自动执行
-
流程:内存缓冲区数据 → 生成 Segment 段文件(写入系统缓存)
-
效果:数据可被检索,但未持久化到磁盘
-
注意:频繁手动刷新
?refresh=true会严重消耗 CPU、IO,高并发场景禁止
2. Flush 持久化(落磁盘)
-
定时自动执行,属于重量级操作
-
流程:将所有 Segment 段文件写入硬盘,生成数据提交点,清空事务日志
-
效果:数据永久落地磁盘,断电不丢失
3. Translog 事务日志
-
写入数据时同步记录,类似 MySQL binlog
-
作用:机器宕机、重启后,恢复未 Flush 落地的数据,保证数据不丢失
4. Segment 段文件
-
分片的底层最小存储文件,每次 Refresh 生成新段文件
-
数据删除/更新不会立刻物理删除,仅标记删除,后台自动合并小段文件
-
段合并目的:减少文件数量,提升检索效率
六、核心 API 与实操要点
1. Bulk 批量 API(高性能必备)
一次 HTTP 请求处理多条增/删/改数据,大幅减少网络往返开销,海量数据同步唯一方案。
2. 索引别名 Alias(生产核心方案)
解决「主分片数量不可修改」的痛点:
-
业务永远访问别名,不直接操作索引
-
需要扩容/缩容分片时:新建索引 → reindex 迁移数据 → 切换别名指向,业务无感知、无需改代码
七、ES 优缺点与适用场景
1. 优点
-
超强全文检索能力,支持分词、模糊匹配、高亮、相关性打分
-
分布式高可用,自动分片、副本容灾,横向扩容简单
-
内置丰富的聚合、排序、统计能力,适合数据分析
-
无Schema约束,适配灵活的文档数据
2. 缺点
-
无强事务、无ACID,不支持核心交易业务
-
近实时延迟,无法做到绝对实时读写
-
深度分页、超大聚合查询性能较差
3. 适用/不适用场景
✅ 适用:日志检索、商品搜索、知识库全文检索、业务数据分析、APP内容搜索
❌ 不适用:金融交易、订单支付、强一致性事务、高频实时更新的核心数据
八、终极核心知识点总结(背诵版)
-
索引(Index) = 表/集合,存储同类文档数据
-
映射(Mapping) = 建表规则,定义字段类型和分词规则
-
主分片:创建索引时固定数量,数据拆分不重复,不可修改
-
副本分片:主分片备份,数据完全一致,数量随时可改
-
text 分词搜全文,keyword 不分词做精准匹配、排序、聚合
-
Refresh 管可搜索(1秒延迟),Flush 管磁盘落地,Translog 管宕机恢复
-
生产用别名+reindex 解决主分片无法扩容的问题
本文由萧兮的博客原创发布,欢迎转载,转载务必保留原文链接。
萧兮的博客:https://www.20010515.xyz · 原文:https://www.20010515.xyz/posts/019f5f50-fc04-7333-9a0e-777f0ee426cf