Elasticsearch 知识点全景整理(面试 & 学习指南)

图片

🚀 无论是求职面试,还是日常工作中的搜索、日志分析和监控系统,Elasticsearch 都是绕不开的技术点。本文从 原理、架构、查询、调优、运维、安全与实践 七大方面,系统梳理 ES 的知识点,帮助你一文掌握面试必考内容。


一、核心概念与数据模型

  1. 基本对象
  • Master Node:负责集群管理、分片调度。

  • Data Node:负责数据存储和检索。

  • Coordinating Node:协调查询。

  • Ingest Node:数据预处理(Pipeline)。

  • 主分片(Primary Shard):原始数据分片。

  • 副本分片(Replica Shard):主分片的拷贝,提升高可用和查询并发能力。

  • Index(索引):相当于数据库的“库”。

  • Type(类型):7.x 之后已废弃。

  • Document(文档):最小数据单元,相当于“行”。

  • Field(字段):文档的属性。

  • 分片(Shard):数据水平切分的基本单元。

  • 集群角色

  1. Mapping 映射
  • text(分词,全文检索)。

  • keyword(不分词,精确匹配)。

  • datelongfloatboolean

  • nested(嵌套对象)、object

  • 定义字段的数据类型、分词器、是否可索引。

  • 支持 静态映射 和 动态映射

  • 常见字段类型:

  1. 分片(Shard)与副本(Replica)
  • 主分片:负责写入,数量在索引创建时固定。

  • 副本分片:容错和负载均衡,数量可动态调整。

  • 原则:单分片大小 10~50GB。

  1. Elasticsearch 中 text 与keyword
  • text:会分词,用于全文检索。

  • keyword:不分词,用于精确匹配(如 ID、邮箱、标签)。

  • 通常字符串字段会同时建 text + keyword(multi-fields)。


二、工作原理

倒排索引

  • 存储形式词项 → 文档 ID 列表

  • 优势:高效模糊搜索、全文检索。

  • 缺点:更新代价高(需要新建 segment)。

  • 查询时通过分词器将输入拆分为词,然后快速找到包含这些词的文档。

  • 适合全文检索,但不适合频繁更新。

写入流程

  1. 客户端请求到协调节点。

  2. 协调节点将请求路由到 主分片(根据 routing 算法)。

  3. 主分片写入后,同步副本分片。

  4. 返回成功。

查询流程

  1. Query Phase:协调节点向所有分片广播请求。各分片返回 doc ID 与得分**+** 排序字段值,但不返回文档内容, 协调节点收到所有分片的候选结果后,做一次全局排序,选出最终 topN 个文档  。

  2. Fetch Phase:  协调节点根据  Query Phase 选出的 topN 文档 ID,再去对应分片拉取完整文档内容, 把结果合并成最终响应,返回给客户端。

NRT(近实时搜索)

  • Lucene 基于 segment 存储。

  • 默认 1s 会执行一次 refresh,新写入的数据才能被查询到。

分词与分析器(Analyzer)

  • 分词器组成:字符过滤器 → 分词器 → 词元过滤器。

  • 常见分词器:

  • StandardAnalyzer:默认英文分词。

  • IK 分词器:中文分词常用。

  • KeywordAnalyzer:整段不分词。


三、查询 DSL 深入

  1. 精确查询
  • term:精确匹配,不分词。

  • terms:多个值匹配。

  • range:范围查询(数值、时间)。

  1. 全文检索
  • match:分词查询。

  • multi_match:跨字段搜索。

  • query_string / simple_query_string:支持语法(AND/OR/*)。

  1. 复合查询
  • bool:组合 must、must_not、should、filter。

  • boosting:提升或降低权重。

  • function_score:自定义打分。

  1. 聚合分析(Aggregation)
  • Bucket:terms、date_histogram、range。

  • Metric:avg、sum、min、max、cardinality。

  • Pipeline:derivative、moving_avg、bucket_script。

  1. 分页查询
  • from+size:性能差,适合浅分页。

  • search_after:基于排序字段,适合深度翻页。

  • scroll:游标方式,适合批量导出。


四、性能优化

1. 索引优化

  • 关闭 _all 字段,禁用动态映射。

  • 控制单分片大小 10~50GB  ,避免过多小索引。

  • 使用合适的分词器(中文推荐 IK)。

  • 根据业务设计字段类型:text(分词)/keyword(精确匹配) 并存。

2. 写入优化

  • 批量写入 Bulk API。

  • 调整 refresh_interval(默认 1s,可临时调大)。

  • 关闭副本再导入,导入完成后再开启。

  • 合并小 segment,减少 flush 频率。

3. 查询优化

  • 用 filter 替代 query(不打分,可缓存)。

  • keyword + doc_values 适合做聚合和排序。

  • 尽量避免前缀 *abc 或正则匹配。

  • 设置合理的 index sorting。

4. 集群优化

  • 建议堆内存为物理内存的 50%,但不超过 32GB(因为超过会失去压缩指针)

  • 合理分配冷热节点,热节点(SSD,高 QPS)+ 冷节点(HDD,存历史数据)。

  • ILM(索引生命周期管理):自动 rollover、迁移数据。

  • 避免过多分片(小索引碎片过多)。


五、运维与监控

  1. 集群状态
  • Green:主/副分片均正常。

  • Yellow:主分片正常,副本分片缺失。

  • Red:主分片丢失,数据不可用。

  1. 常见问题排查
  • 分片未分配:磁盘不足 / 节点宕机。

  • 查询超时:分片过多 / DSL 不合理。

  • 内存溢出:大聚合查询 / Heap 过小。

  1. 监控指标
  • Heap 使用率、GC 次数。

  • Indexing/Query TPS。

  • 分片分布是否均衡。

  • 磁盘 I/O、队列长度。

  1. 快照与恢复
  • 快照Repository:HDFS、S3、NAS。

  • 支持增量快照。

  • 可用于跨集群迁移。

  1. 常用排查命令
  • GET _cluster/health:查看集群状态。

  • GET _cat/indices:查看索引健康情况。

  • GET _cluster/allocation/explain:分片未分配原因。


六、安全与高可用

  1. 权限管理
  • X-Pack Security:认证、RBAC。

  • TLS 加密传输。

  • API Key / Token。

  1. 高可用设计
  • 主从分片机制,副本冗余。

  • Master 节点选举(Zen Discovery / Raft 方案)。

  • 跨集群搜索(CCS)。

  • 跨集群复制(CCR)。


七、生态与应用场景

  1. 日志与监控
  • ELK(Elasticsearch + Logstash + Kibana)。

  • EFK(Elasticsearch + Fluentd + Kibana)。

  • Metricbeat / Filebeat。

  1. 搜索业务
  • 电商站内搜索。

  • 智能推荐(结合打分函数)。

  • 地理位置搜索(Geo query)。

  1. APM 与可观测性
  • Elastic APM:链路追踪、性能分析。

  • Kibana 可视化大屏。

  1. 安全场景
  • SIEM(安全信息与事件管理)。

  • 入侵检测日志分析。


八、典型面试题集锦

  1. ES 为什么比数据库快?
    → 倒排索引 + 内存缓存,避免全表扫描。

  2. ES 是实时搜索吗?
    → 不是,属于 NRT(Near Real Time),1s 延迟。

  3. 深度分页如何解决?
    → 使用 search_after 或 scroll, 而不是 from+size  。

  4. 主分片数量能改吗?
    → 不能,必须在创建索引时确定;副本数可改。

  5. 如何处理 ES 集群 Yellow/Red?
    → Yellow:副本不足;Red:主分片丢失 → 检查磁盘、节点、分片分配。

  6. ES 如何做冷热分离?
    → 节点分层,ILM 策略。

  7. ES 和 Solr 的区别?

  • Solr 基于 ZooKeeper,强 schema,适合结构化搜索。

  • ES 内置分布式,schema 灵活,生态更好。


九、实战经验亮点(面试加分)

  • 日志平台案例:百万级日志秒级检索,使用 Filebeat + ES + Kibana。

  • 查询性能优化:通过 filter 缓存 + keyword 聚合,将查询延迟降低 70%。

  • 集群容灾经验:配置跨集群复制(CCR),保障机房级别容灾。

  • 数据分层:热节点存近 7 天数据,冷节点存归档数据,节省 60% 存储成本。


🔚 总结

Elasticsearch 的知识体系庞大,但面试核心集中在:

  • 基础原理(倒排索引、写入/查询流程)。

  • 架构机制(分片、副本、NRT)。

  • 查询与调优(DSL、深度分页、filter vs query)。

  • 运维与排错(集群状态、分片分配、JVM 调优)。

  • 应用场景(日志、搜索、监控)。

掌握这些,不仅能应对大部分面试,还能落地到实际项目。

公众号:运维开发故事

github:https://github.com/orgs/sunsharing-note/dashboard

博客**:https://www.devopstory.cn**

爱生活,爱运维

我是wanger,《运维开发故事》公众号团队中的一员,一线运维农民工,云原生实践者,这里不仅有硬核的技术干货,还有我们对技术的思考和感悟,欢迎关注我们的公众号,期待和你一起成长!

图片

扫码二维码

关注我,不定期维护优质内容

温馨提示

如果我的文章对你有所帮助,还请帮忙点赞、在看、转发一下,你的支持会激励我输出更高质量的文章,非常感谢!

你还可以把我的公众号设为「星标」,这样当公众号文章更新时,你会在第一时间收到推送消息,避免错过我的文章更新。

........................

------本页内容已结束,喜欢请分享------

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发
运维开发故事的头像-运维开发故事

昵称

取消
昵称表情代码图片