跳到主要内容

ElasticSearch面试题

Elasticsearch基础知识

概述与架构

  1. 什么是Elasticsearch?主要用来做什么?
  2. Elasticsearch的核心概念有哪些?(索引、文档、字段、映射等)
  3. Elasticsearch和传统数据库的区别?
  4. Elasticsearch和Solr的区别?
  5. 你们ES什么版本?为什么选择这个版本?
  6. Elasticsearch的应用场景有哪些?

基本概念

  1. 什么是索引(Index)、类型(Type)、文档(Document)?
  2. 什么是分片(Shard)和副本(Replica)?
  3. 主分片和副本分片的区别?
  4. 什么是倒排索引?工作原理是什么?
  5. 什么是映射(Mapping)?动态映射和静态映射的区别?
  6. ES 7.x去掉了Type,为什么?

集群架构

  1. ES集群都有哪些节点类型?(Master、Data、Coordinating、Ingest)
  2. 各种节点的作用是什么?
  3. 什么是集群状态?包含哪些信息?
  4. ES如何实现分布式?
  5. 你们ES有多少个节点?如何规划的?
  6. 你们ES服务器什么配置?为什么这样配置?

数据操作

索引管理

  1. 如何创建索引?需要考虑哪些因素?
  2. 如何查看索引信息?(不用插件,命令)
  3. 如何删除索引?删除索引会发生什么?
  4. 什么是索引模板?如何使用?
  5. 什么是索引别名?使用场景?
  6. 如何进行索引的滚动更新?

文档操作

  1. 如何插入、更新、删除文档?
  2. 什么是文档ID?可以自定义吗?
  3. 批量操作的API有哪些?(bulk、mget)
  4. 文档的版本控制是如何实现的?
  5. 什么是路由(Routing)?作用是什么?

数据类型

  1. ES支持哪些数据类型?
  2. text和keyword的区别?
  3. 数值类型有哪些?如何选择?
  4. 日期类型如何处理?
  5. 嵌套类型(nested)和对象类型(object)的区别?
  6. 地理位置类型如何使用?

搜索与查询

查询DSL

  1. ES的查询类型有哪些?
  2. match和term查询的区别?
  3. bool查询的子句有哪些?(must、should、must_not、filter)
  4. range查询如何使用?
  5. wildcard和regexp查询的性能问题?
  6. 如何进行模糊查询?

搜索原理

  1. ES的搜索过程是怎样的?(查询阶段、取回阶段)
  2. 什么是相关性评分?如何计算?
  3. 如何自定义评分?
  4. 什么是高亮显示?如何实现?

聚合分析

  1. ES的聚合类型有哪些?(Metrics、Bucket、Pipeline)
  2. 常用的聚合操作有哪些?
  3. terms聚合的精度问题?
  4. 如何实现分组统计?
  5. 如何实现时间序列分析?
  6. 聚合的性能优化?

搜索优化

  1. 如何优化搜索性能?
  2. 什么是Filter缓存?如何使用?
  3. 如何减少搜索的响应时间?
  4. scroll和search after的区别?
  5. 深度分页的问题如何解决?

性能优化

索引优化

  1. 假设你ES里有一个索引几百个G,查询很慢,有什么优化方案?
  2. 如何设置合理的分片数?
  3. 如何进行索引的冷热分离?
  4. 什么是索引生命周期管理(ILM)?
  5. refresh和flush的区别?如何优化?
  6. 段合并(Segment Merge)如何优化?

查询优化

  1. 如何优化查询性能?
  2. 如何使用Profile API分析查询?
  3. 如何避免深度分页?
  4. 如何优化聚合查询?
  5. 预索引(Pre-indexing)数据的技巧?

JVM优化

  1. ES的JVM如何调优?
  2. 堆内存设置多少合适?为什么不超过32G?
  3. 如何监控GC情况?
  4. 如何避免OOM?
  5. G1和CMS垃圾收集器如何选择?

系统优化

  1. 操作系统层面如何优化?
  2. 文件系统如何选择?
  3. 如何优化磁盘I/O?
  4. 网络配置如何优化?
  5. 如何使用SSD提升性能?

集群管理

集群状态

  1. ES集群健康状态有哪几种?(Green、Yellow、Red)
  2. 集群状态是Red,如何恢复到Green?
  3. 如何查看集群健康状态?
  4. 分片分配失败的原因?如何处理?
  5. 如何处理未分配的分片?

节点管理

  1. 如何添加和删除节点?
  2. 节点离线会发生什么?
  3. 如何进行节点的隔离?
  4. 节点角色如何分配?
  5. 如何避免脑裂问题?

数据管理

  1. 你们ES数据量有多大?多少个索引?
  2. 如何进行容量规划?
  3. 如何处理大索引?
  4. 数据保留策略是什么?
  5. 如何进行数据归档?

备份与恢复

快照备份

  1. ES如何进行备份?使用什么工具?
  2. 什么是快照和恢复?
  3. 如何创建快照仓库?
  4. 快照的增量备份原理?
  5. 如何恢复快照?
  6. 跨集群恢复如何实现?

数据迁移

  1. 如何进行索引迁移?
  2. 如何进行集群间的数据同步?
  3. Reindex API如何使用?
  4. 如何进行零停机迁移?
  5. 使用过哪些迁移工具?

监控与运维

监控指标

  1. ES都需要监控哪些指标?
  2. 如何监控集群健康状态?
  3. 如何监控节点性能?
  4. 如何监控索引性能?
  5. 如何监控查询性能?
  6. 慢查询日志如何配置和分析?

日志管理

  1. ES有哪些日志文件?
  2. 如何配置日志级别?
  3. 如何分析ES日志?
  4. 常见的错误日志有哪些?

故障处理

  1. ES启动失败如何排查?
  2. 节点加入集群失败如何处理?
  3. OOM问题如何处理?
  4. 磁盘空间不足如何处理?
  5. 集群响应慢如何排查?

安全管理

  1. ES的安全特性有哪些?
  2. 如何配置用户认证?
  3. 如何配置SSL/TLS?
  4. 如何设置访问控制?
  5. 如何进行审计日志配置?

ELK Stack

整体架构

  1. 什么是ELK Stack?各组件的作用?
  2. Beats的作用是什么?有哪些类型?
  3. Logstash的作用是什么?
  4. Kibana的作用是什么?
  5. 你们ELK架构是怎样的?

日志处理

  1. 如何使用ELK收集日志?
  2. Logstash的pipeline配置?
  3. 如何解析不同格式的日志?
  4. 如何进行日志的过滤和转换?
  5. 如何处理多行日志?

数据可视化

  1. 如何使用Kibana创建可视化?
  2. 如何创建Dashboard?
  3. 如何进行日志分析?
  4. 如何设置告警?
  5. Kibana性能优化?

高级特性

机器学习

  1. ES的机器学习功能了解吗?
  2. 异常检测如何实现?
  3. 预测分析如何使用?

SQL支持

  1. ES SQL功能如何使用?
  2. SQL和DSL的转换?
  3. JDBC驱动如何使用?

其他特性

  1. ES的跨集群搜索(CCS)了解吗?
  2. ES的跨集群复制(CCR)了解吗?
  3. 向量搜索功能了解吗?
  4. ES和Kafka集成方案?
  5. ES在大数据架构中的位置?

实战经验

最佳实践

  1. 生产环境ES的最佳实践?
  2. 索引设计的原则?
  3. 集群规模如何规划?
  4. 如何避免常见的坑?

案例分析

  1. 遇到过哪些ES的问题?如何解决的?
  2. 做过哪些性能优化?效果如何?
  3. 如何处理过亿级数据?
  4. 实时搜索如何实现?
  5. ES在你们业务中的应用场景?

更新时间:2025-01-30