MayBaymax头像
关注
ES 基础总结封面图

ES 基础总结

Elasticsearch 基础总结

一、Elasticsearch 是什么

开源的分布式、RESTful 搜索和分析引擎,Java 开发,基于 Lucene。7.x 起内置 JDK,无需额外依赖。支持文本、数值、地理空间、结构化与非结构化数据。

一句话:ES 是一个专门用来“搜索”和“分析”海量数据的引擎,不是用来替代 MySQL 的。


二、Lucene 是什么

Lucene 是一个用 Java 编写的全文检索库,是 ES 的底层核心。它提供倒排索引、分词、评分、高亮等能力。由于其没有分布式和高可用,直接基于它开发非常复杂。ES 在其上封装了 REST API、分布式、副本等

一句话:

“ES 底层是 Lucene,Lucene 提供了倒排索引和全文检索能力。ES 在 Lucene 之上加了分布式、副本、REST API,让它变成一个可以直接用的搜索系统。”


三、ES 能帮你做什么

场景说明
全文检索商品搜索、文章搜索、日志搜索
日志分析ELK(Elasticsearch + Logstash + Kibana)
聚合分析统计、分组、报表、仪表盘
模糊匹配拼写纠错、同义词、拼音搜索
地理位置搜索附近的人、附近的店
向量搜索RAG、推荐系统(新趋势)

不适合:

  • 强事务场景(如银行转账)
  • 复杂关联查询(多表 JOIN)
  • 频繁更新的数据

四、为什么 ES 可以而 MySQL 不行?

核心原因:数据结构不同。

1. MySQL 的索引是 B+ 树
  • B+ 树适合精确匹配和范围查询。
  • 对于 LIKE '%关键字%',无法走索引,只能全表扫描。
  • 数据量大时,全表扫描极慢。
2. ES 的索引是倒排索引
  • 倒排索引是 Term → 文档 ID 列表 的映射。
  • 写入时对文本分词,建立 Term 和文档的关系。
  • 查询时直接根据 Term 找到文档,不需要扫描全表。
3. 举例

查询“手机”:

  • MySQL:WHERE title LIKE '%手机%' → 全表扫描,慢。
  • ES:倒排索引直接找到包含“手机”的文档 ID → 快。
4. 一句话

“MySQL 用 B+ 树,适合精确匹配和范围查询,但 LIKE ‘%xxx%’ 无法走索引,只能全表扫描。ES 用倒排索引,写入时分词建立 Term 到文档的映射,查询时直接根据 Term 定位,所以全文检索快很多。这就是为什么搜海量文本用 ES,而不用 MySQL。”


五、ES 核心概念

概念说明类比 MySQL
Cluster(集群)一个或多个节点组成,对外提供搜索服务一个数据库实例
Node(节点)一个 ES 进程,属于某个集群一个数据库服务器
Index(索引)文档的集合,类似数据库的表表
Document(文档)一条 JSON 记录行
Field(字段)文档中的一个属性列
Mapping(映射)定义字段类型和属性表结构
Shard(分片)索引的水平拆分,每个分片是一个 Lucene 实例分库分表
Replica(副本)分片的备份,提供高可用和读扩展主从复制
倒排索引Term → 文档 ID 的映射无直接对应

一句话:

“ES 里索引类似 MySQL 的表,文档类似行,字段类似列,Mapping 类似表结构。索引可以拆成多个分片,每个分片是一个 Lucene 实例,副本提供高可用。ES 用倒排索引做全文检索,和 MySQL 的 B+ 树互补。”


六、常见考察点

面试不会直接问“ES 是什么”,而是通过以下方式考察:

问题考察点
“你项目为什么用 ES?”ES 是什么、能做什么、和 MySQL 区别
“ES 和 MySQL 有什么区别?”B+ 树 vs 倒排索引、全文检索 vs 事务
“ES 底层是什么?”Lucene、倒排索引
“ES 里的索引、文档、分片是什么?”基础概念
“数据怎么从 MySQL 同步到 ES?”数据同步方案
“ES 为什么快?”倒排索引、分布式、分片

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/J_Baymax/article/details/166774795

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--