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. 容灾容错:主分片节点宕机,副本自动升级为主分片,数据不丢失

    2. 提升查询性能:读请求可分摊到主分片+所有副本分片

  • 硬性机制:同一个分片的主、副本绝不放在同一台节点,避免单机宕机双丢

分片计算公式

总分片实体数 = 主分片数 × (副本数 + 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内容搜索

❌ 不适用:金融交易、订单支付、强一致性事务、高频实时更新的核心数据

八、终极核心知识点总结(背诵版)

  1. 索引(Index) = 表/集合,存储同类文档数据

  2. 映射(Mapping) = 建表规则,定义字段类型和分词规则

  3. 主分片:创建索引时固定数量,数据拆分不重复,不可修改

  4. 副本分片:主分片备份,数据完全一致,数量随时可改

  5. text 分词搜全文,keyword 不分词做精准匹配、排序、聚合

  6. Refresh 管可搜索(1秒延迟),Flush 管磁盘落地,Translog 管宕机恢复

  7. 生产用别名+reindex 解决主分片无法扩容的问题


本文由萧兮的博客原创发布,欢迎转载,转载务必保留原文链接。

萧兮的博客https://www.20010515.xyz · 原文:https://www.20010515.xyz/posts/019f5f50-fc04-7333-9a0e-777f0ee426cf