一、基础概念类
- Elasticsearch 是什么?和传统关系型数据库(MySQL)的核心区别是什么?
- 答案:Elasticsearch 是一款分布式、RESTful 风格的全文检索与数据分析引擎,基于 Lucene 构建,支持海量数据的实时搜索、分析和存储。
- ES 的核心组件(Index、Type、Document、Shard、Replica)分别是什么?Type 为什么在 7.x 被废弃?
- 核心组件:
- Index(索引):类比 MySQL 的
Database,是一类相似文档的集合。 - Type(类型):类比 MySQL 的
Table,7.x 后被废弃,原因是同一索引下不同 Type 的文档字段冲突会导致 Lucene 效率下降,官方推荐一个索引对应一个业务类型。 - Document(文档):类比 MySQL 的
Row,是 ES 中最小的数据单元,以 JSON 格式存储。 - Shard(分片):索引的水平拆分单元,解决单节点存储和查询瓶颈,分片数在索引创建时指定,后续无法修改。
- Replica(副本):分片的备份,用于故障转移和提升查询吞吐量,副本数可动态调整。
- Index(索引):类比 MySQL 的
- Type 废弃核心原因:Lucene 的底层是单一索引结构,不同 Type 的文档会存储在同一个 Lucene 索引中,字段冲突会导致字段类型混乱,影响检索效率。
- 核心组件:
- 什么是倒排索引?它的优缺点是什么?
- 答案:倒排索引是全文检索的核心数据结构,与传统'正排索引(文档→关键词)'相反,它是关键词→文档列表的映射。
- 构建过程:分词器将文档内容拆分为词条(Term),记录每个词条出现在哪些文档(Doc ID)、位置(Position)、频率(TF)。
- 优点:全文检索效率极高,能快速匹配包含某个关键词的所有文档。
- 缺点:
- 写入 / 更新成本高:新增或修改文档时,需要重新构建倒排索引。
- 占用存储空间较大:需要存储词条与文档的映射关系。
- 答案:倒排索引是全文检索的核心数据结构,与传统'正排索引(文档→关键词)'相反,它是关键词→文档列表的映射。
与 MySQL 的核心区别:
| 维度 | Elasticsearch | MySQL |
|---|---|---|
| 存储模型 | 文档型(JSON 文档) | 关系型(行、列、表) |
| 索引结构 | 倒排索引(全文检索核心) | B+ 树(高效范围查询) |
| 核心场景 | 全文搜索、日志分析、数据聚合 | 事务性业务、结构化查询 |
| 分布式特性 | 原生支持分片、副本 | 需依赖中间件(如 MyCat) |
二、核心原理类
- ES 的分片路由机制是什么?公式是什么?
- 答案:当写入文档时,ES 会根据文档 ID 计算出该文档应该分配到哪个分片,这个过程就是分片路由。
- 路由公式:
shard = hash(routing) % number_of_primary_shardsrouting:默认是文档的_id,也可以自定义。number_of_primary_shards:主分片数量,创建索引时固定。


