ElasticSearch面试题
Elasticsearch基础知识
概述与架构
- 什么是Elasticsearch?主要用来做什么?
- Elasticsearch的核心概念有哪些?(索引、文档、字段、映射等)
- Elasticsearch和传统数据库的区别?
- Elasticsearch和Solr的区别?
- 你们ES什么版本?为什么选择这个版本?
- Elasticsearch的应用场景有哪些?
基本概念
- 什么是索引(Index)、类型(Type)、文档(Document)?
- 什么是分片(Shard)和副本(Replica)?
- 主分片和副本分片的区别?
- 什么是倒排索引?工作原理是什么?
- 什么是映射(Mapping)?动态映射和静态映射的区别?
- ES 7.x去掉了Type,为什么?
集群架构
- ES集群都有哪些节点类型?(Master、Data、Coordinating、Ingest)
- 各种节点的作用是什么?
- 什么是集群状态?包含哪些信息?
- ES如何实现分布式?
- 你们ES有多少个节点?如何规划的?
- 你们ES服务器什么配置?为什么这样配置?
数据操作
索引管理
- 如何创建索引?需要考虑哪些因素?
- 如何查看索引信息?(不用插件,命令)
- 如何删除索引?删除索引会发生什么?
- 什么是索引模板?如何使用?
- 什么是索引别名?使用场景?
- 如何进行索引的滚动更新?
文档操作
- 如何插入、更新、删除文档?
- 什么是文档ID?可以自定义吗?
- 批量操作的API有哪些?(bulk、mget)
- 文档的版本控制是如何实现的?
- 什么是路由(Routing)?作用是什么?
数据类型
- ES支持哪些数据类型?
- text和keyword的区别?
- 数值类型有哪些?如何选择?
- 日期类型如何处理?
- 嵌套类型(nested)和对象类型(object)的区别?
- 地理位置类型如何使用?
搜索与查询
查询DSL
- ES的查询类型有哪些?
- match和term查询的区别?
- bool查询的子句有哪些?(must、should、must_not、filter)
- range查询如何使用?
- wildcard和regexp查询的性能问题?
- 如何进行模糊查询?
搜索原理
- ES的搜索过程是怎样的?(查询阶段、取回阶段)
- 什么是相关性评分?如何计算?
- 如何自定义评分?
- 什么是高亮显示?如何实现?
聚合分析
- ES的聚合类型有哪些?(Metrics、Bucket、Pipeline)
- 常用的聚合操作有哪些?
- terms聚合的精度问题?
- 如何实现分组统计?
- 如何实现时间序列分析?
- 聚合的性能优化?
搜索优化
- 如何优化搜索性能?
- 什么是Filter缓存?如何使用?
- 如何减少搜索的响应时间?
- scroll和search after的区别?
- 深度分页的问题如何解决?
性能优化
索引优化
- 假设你ES里有一个索引几百个G,查询很慢,有什么优化方案?
- 如何设置合理的分片数?
- 如何进行索引的冷热分离?
- 什么是索引生命周期管理(ILM)?
- refresh和flush的区别?如何优化?
- 段合并(Segment Merge)如何优化?
查询优化
- 如何优化查询性能?
- 如何使用Profile API分析查询?
- 如何避免深度分页?
- 如何优化聚合查询?
- 预索引(Pre-indexing)数据的技巧?
JVM优化
- ES的JVM如何调优?
- 堆内存设置多少合适?为什么不超过32G?
- 如何监控GC情况?
- 如何避免OOM?
- G1和CMS垃圾收集器如何选择?
系统优化
- 操作系统层面如何优化?
- 文件系统如何选择?
- 如何优化磁盘I/O?
- 网络配置如何优化?
- 如何使用SSD提升性能?
集群管理
集群状态
- ES集群健康状态有哪几种?(Green、Yellow、Red)
- 集群状态是Red,如何恢复到Green?
- 如何查看集群健康状态?
- 分片分配失败的原因?如何处理?
- 如何处理未分配的分片?
节点管理
- 如何添加和删除节点?
- 节点离线会发生什么?
- 如何进行节点的隔离?
- 节点角色如何分配?
- 如何避免脑裂问题?
数据管理
- 你们ES数据量有多大?多少个索引?
- 如何进行容量规划?
- 如何处理大索引?
- 数据保留策略是什么?
- 如何进行数据归档?
备份与恢复
快照备份
- ES如何进行备份?使用什么工具?
- 什么是快照和恢复?
- 如何创建快照仓库?
- 快照的增量备份原理?
- 如何恢复快照?
- 跨集群恢复如何实现?
数据迁移
- 如何进行索引迁移?
- 如何进行集群间的数据同步?
- Reindex API如何使用?
- 如何进行零停机迁移?
- 使用过哪些迁移工具?
监控与运维
监控指标
- ES都需要监控哪些指标?
- 如何监控集群健康状态?
- 如何监控节点性能?
- 如何监控索引性能?
- 如何监控查询性能?
- 慢查询日志如何配置和分析?
日志管理
- ES有哪些日志文件?
- 如何配置日志级别?
- 如何分析ES日志?
- 常见的错误日志有哪些?
故障处理
- ES启动失败如何排查?
- 节点加入集群失败如何处理?
- OOM问题如何处理?
- 磁盘空间不足如何处理?
- 集群响应慢如何排查?
安全管理
- ES的安全特性有哪些?
- 如何配置用户认证?
- 如何配置SSL/TLS?
- 如何设置访问控制?
- 如何进行审计日志配置?
ELK Stack
整体架构
- 什么是ELK Stack?各组件的作用?
- Beats的作用是什么?有哪些类型?
- Logstash的作用是什么?
- Kibana的作用是什么?
- 你们ELK架构是怎样的?
日志处理
- 如何使用ELK收集日志?
- Logstash的pipeline配置?
- 如何解析不同格式的日志?
- 如何进行日志的过滤和转换?
- 如何处理多行日志?
数据可视化
- 如何使用Kibana创建可视化?
- 如何创建Dashboard?
- 如何进行日志分析?
- 如何设置告警?
- Kibana性能优化?
高级特性
机器学习
- ES的机器学习功能了解吗?
- 异常检测如何实现?
- 预测分析如何使用?
SQL支持
- ES SQL功能如何使用?
- SQL和DSL的转换?
- JDBC驱动如何使用?
其他特性
- ES的跨集群搜索(CCS)了解吗?
- ES的跨集群复制(CCR)了解吗?
- 向量搜索功能了解吗?
- ES和Kafka集成方案?
- ES在大数据架构中的位置?
实战经验
最佳实践
- 生产环境ES的最佳实践?
- 索引设计的原则?
- 集群规模如何规划?
- 如何避免常见的坑?
案例分析
- 遇到过哪些ES的问题?如何解决的?
- 做过哪些性能优化?效果如何?
- 如何处理过亿级数据?
- 实时搜索如何实现?
- ES在你们业务中的应用场景?
更新时间:2025-01-30