ElasticSearch 面试题及详细答案(实战完整版)_第1页
ElasticSearch 面试题及详细答案(实战完整版)_第2页
ElasticSearch 面试题及详细答案(实战完整版)_第3页
ElasticSearch 面试题及详细答案(实战完整版)_第4页
ElasticSearch 面试题及详细答案(实战完整版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ElasticSearch面试题及详细答案(实战完整版)一、基础概念类1、简单说说ElasticSearch的核心特点,日常项目中为什么用它?参考答案:ES是一款分布式的全文检索引擎,基于Lucene内核开发,核心优势集中在检索和海量数据实时查询场景。日常项目中选用它,主要是弥补MySQL的短板:MySQL在数据量大、模糊查询、分词检索、多条件复杂搜索场景下效率极低,甚至会失效索引,而ES专门优化了检索场景。核心特点有四点:1.全文检索能力强,支持中文分词、模糊匹配、短语匹配、高亮显示;2.分布式架构,支持水平扩容,集群稳定性高,适合海量数据存储;3.近实时查询,数据写入后1秒左右即可检索,满足业务实时性需求;4.支持复杂聚合统计,可快速实现分组、求和、最值、直方图等数据分析功能。2、ES和MySQL的核心区别是什么?各自适用场景?参考答案:核心区别:MySQL是关系型数据库,基于行存储,主打事务、一致性、增删改精准操作,索引结构为B+树,擅长精准查询和事务处理;ES是非关系型检索引擎,基于倒排索引存储,主打全文检索、模糊查询、海量数据聚合,不支持严格事务,读写性能远优于MySQL的检索场景。适用场景:MySQL:核心业务数据存储、需要事务保证的场景(订单、用户、支付)、精准CRUD、关联查询;ES:商品搜索、日志检索、订单模糊查询、用户行为分析、海量数据聚合统计、内容高亮检索。3、什么是倒排索引?ES为什么检索速度快?参考答案:普通正向索引是「文档→关键词」,遍历文档匹配关键词,数据量大时效率极低;倒排索引是「关键词→文档列表」,先将文本分词,记录每个分词对应的文档ID、位置、频次。检索时,无需遍历全部数据,直接通过关键词找到对应的文档集合,再做合并、过滤、排序,这是ES检索速度快的核心原因。同时ES会将热点索引数据缓存到内存,磁盘数据做分段存储、压缩存储,进一步提升查询效率。4、ES近实时(NRT)原理是什么?为什么写入后不能立刻查到?参考答案:ES数据写入流程:数据先写入内存缓冲区,此时数据不可检索;缓冲区满或定时刷新(默认1秒),会将数据生成段文件写入文件缓存,此时数据可检索;后续会定期将段文件落盘、合并分段。所谓近实时,就是默认1秒刷新一次缓冲区,所以数据写入后大概率1秒左右才能查到。如果业务需要强实时,可手动执行refresh刷新,但会大幅降低写入性能,生产环境不建议频繁使用。二、索引与字段原理类5、ES索引、类型、文档的关系?新版本为什么废弃type?参考答案:三者层级关系:索引(库)>类型(表)>文档(行数据)。早期ES一个索引下可创建多个type,用来区分不同数据结构的文档。新版本废弃type的核心原因:ES底层同一个索引下的不同type,字段是共用的。如果不同type存在同名字段但类型不同,会出现字段冲突、映射错乱问题,极易引发数据异常、查询报错。目前生产环境规范:一个索引对应一种数据类型,不再使用type,彻底规避字段冲突问题。6、ES常用字段类型有哪些?text和keyword核心区别?参考答案:常用基础类型:字符串(text/keyword)、数值(integer/long/float/double)、布尔、日期、对象、数组、地理位置类型。text和keyword核心区别:1.分词差异:text类型写入时会分词,适合全文搜索;keyword类型不分词,完整存储原始文本;2.查询方式:text支持模糊、匹配、全文检索;keyword只支持精准匹配、通配符查询;3.聚合排序:text不支持聚合、排序;keyword支持分组聚合、排序、去重;4.场景区分:商品名称、内容简介用text;状态、标签、分类、手机号、邮箱用keyword。7、什么是映射(mapping)?动态映射和静态映射的区别?生产环境用哪种?参考答案:mapping就是ES索引的字段结构定义,包含字段名称、字段类型、分词器、是否索引、是否存储等配置,等同于数据库的表结构。动态映射:未提前定义mapping时,ES自动根据写入数据识别字段类型,优点是使用便捷,缺点是识别不准(比如数字识别为字符串、文本默认分词不合理),容易埋下线上隐患。静态映射:手动提前创建索引、定义字段类型和规则,类型精准、可控性强。生产环境强制使用静态映射,杜绝动态映射,避免字段类型错乱导致的查询、聚合异常。8、index、store属性的作用?日常如何配置?参考答案:index:控制字段是否建立索引,默认true。true可检索、可过滤;false不建索引,无法通过该字段查询,仅做存储。store:控制字段是否单独存储,默认false。ES默认会将整行文档存储在_source中,普通字段无需单独存储,节省磁盘空间。日常配置:检索字段index=true;仅展示、无需查询的字段(如备注、冗余字段)index=false;store一律默认false,通过_source获取数据即可。三、查询语法与实战类9、match和term查询的核心区别?分别适用什么场景?参考答案:1.term:精准匹配,不对查询条件分词,直接匹配索引中的分词结果。适合keyword、数值、日期等精准字段查询;2.match:全文匹配,会对查询条件先分词,再去索引中匹配,多个分词默认或逻辑匹配。适合text类型的全文检索。高频踩坑点:text字段用term查询大概率查不到数据,因为文本已被分词拆分,精准完整字符串不存在;keyword字段用match查询等同于精准查询。10、must、should、must_not、filter各自作用?布尔查询执行逻辑?参考答案:布尔查询(bool)是ES最常用的组合查询,四个子句逻辑:1.must:必须匹配,参与分值计算,影响搜索排序;2.should:可选匹配,满足加分、不满足不扣分,控制相关性权重;3.must_not:必须不匹配,不计算分值,属于过滤条件;4.filter:必须匹配,无分值计算,可缓存查询结果,性能最优。生产规范:精准过滤、条件筛选优先用filter,提升查询缓存命中率;需要相关性排序的检索用must/should。11、深度分页问题是什么?from+size为什么不支持深分页?如何解决?参考答案:from+size是常规分页方式,原理是查询所有匹配数据、排序后跳过from条、取size条。当from值过大(如10000页以后),需要加载、排序、丢弃海量数据,内存开销极大,极易触发OOM,所以ES默认限制最大from+size为10000。深分页解决方案(生产常用):1.scroll滚动分页:适合批量导出全量数据,不适合用户实时翻页,快照查询,数据实时性差;2.search_after分页:基于排序字段游标分页,无数量上限,性能高,支持用户持续翻页,是生产主流方案;3.业务层限制:禁止用户无限制翻页,只允许查看前1000页,绝大多数业务可满足。12、ES高亮查询原理?为什么会出现高亮失效?参考答案:高亮原理:检索匹配成功后,ES会根据查询关键词,在原始文本中匹配对应分词,通过自定义标签包裹关键词,返回带标记的高亮文本,前端直接渲染即可。高亮失效常见原因:1.查询字段和高亮字段不一致;2.字段未分词、或分词器不匹配,关键词无法命中文本分词;3.文本过短、高亮片段参数配置不合理;4.使用精准term查询,无分词匹配逻辑。四、聚合分析类13、ES常用聚合类型有哪些?bucket和metric聚合区别?参考答案:ES聚合核心分两大类:1.Bucket桶聚合:分组聚合,按照字段值、区间、日期拆分数据为多个桶,类似SQL的groupby。常用:terms(精准分组)、range(区间分组)、date_histogram(日期直方图);2.Metric指标聚合:对桶内数据做统计计算,类似SQL的sum、count、max。常用:count、sum、avg、max、min、distinct_count(去重计数)。日常开发中都是嵌套聚合:先桶分组,再对每组做指标统计。14、terms聚合不准、数据有误差的原因?如何解决?参考答案:这是分布式聚合的经典问题。ES集群有多个分片,terms聚合时,每个分片先独立统计topN数据,再汇总合并结果,并非全局全量统计,会导致部分小众数据被遗漏,出现计数偏差。解决方案:1.调大shard_size参数,让每个分片统计更多数据,减少遗漏概率;2.数据量小、精度要求极高的场景,可使用单分片索引;3.超大批量精准统计,采用离线聚合、日志解析方案兜底。五、集群与分片原理类15、主分片、副本分片的作用?副本数设置原则?参考答案:主分片(primary):数据写入、更新、删除的核心分片,所有写操作必须先经过主分片同步成功,再同步到副本分片。主分片数量创建索引后不可修改,决定了索引最大水平扩容分片数。副本分片(replica):主分片的备份数据,不参与写操作,只分担读请求、做容灾恢复。主分片故障时,副本会自动晋升为主分片,保证集群可用。副本设置原则:1.生产环境副本数至少1,避免单节点故障数据丢失;2.副本数不能超过集群节点数,否则分片无法分配,集群报黄;3.读多写少业务可适当增加副本提升查询并发,写多读少业务减少副本降低同步开销。16、集群健康值green、yellow、red分别代表什么?参考答案:green(绿色):所有主分片、副本分片全部正常分配,集群完全健康;yellow(黄色):主分片全部正常,部分副本分片未分配、未同步,数据无丢失,但容灾能力失效;red(红色):存在主分片未分配,对应索引数据不可用,部分读写功能异常,属于线上严重故障。17、ES分片为什么不能随意修改主分片数?参考答案:ES的数据是根据文档ID哈希分配到对应主分片的,哈希规则固定。如果修改主分片数量,哈希结果会全部改变,所有数据的分片归属都会错乱,需要全量重新分片、迁移数据,成本极高且极易数据错乱。因此官方限制主分片数创建后不可修改,只能通过重建索引、数据迁移调整。六、性能优化与实战踩坑类18、ES写入性能优化有哪些手段?参考答案:1.批量写入:使用bulk接口批量提交数据,代替单条写入,大幅减少网络IO开销;2.调大刷新间隔:生产环境将refresh_interval从1s改为30s或更长,减少分段创建开销,提升写入吞吐量;3.临时关闭副本:大批量导数据时,临时设置副本数为0,导入完成后再开启,避免同步耗时;4.优化分片配置:合理设置分片大小,单分片数据量控制在20G-50G最佳;5.禁用_source、_all等无用字段,减少数据存储开销;6.集群硬件优化:使用SSD磁盘、增大内存、优化JVM参数。19、ES查询性能优化核心方案?参考答案:1.合理设计mapping:精准区分text/keyword,无用字段关闭索引,避免多余分词;2.优先使用filter过滤:利用查询缓存,避免分值计算,提升重复查询效率;3.避免深分页、超大结果集查询:用search_after替代from+size深分页;4.优化分词器:选择适配业务的分词器,避免无效分词、冗余分词;5.索引冷热分离:热数据独立索引、冷数据归档,减少检索扫描范围;6.限制查询字段:查询时指定需要返回的字段,不返回完整_source,减少数据传输;7.合理增加副本:分担读压力,提升并发查询能力。20、ES数据更新、删除为什么性能差?如何优化?参考答案:ES底层是只读分段文件,不支持原地修改和删除。更新数据本质是「查询旧数据+生成新分段+标记旧数据删除」;删除数据只是标记删除,不会立刻释放磁盘空间。频繁增删改会产生大量冗余分段、垃圾数据,导致查询变慢、磁盘占用升高。优化方案:1.业务层面减少频繁更新,批量更新代替单条更新;2.定时执行force_merge,合并分段、清理已删除标记数据;3.海量变动数据采用定时重建索引、全量同步方案,代替实时更新;4.冷热数据分离,定期归档删除冷数据索引。七、故障排查与线上问题类21、集群报黄的常见原因及解决办法?参考答案:常见原因:副本分片无法分配、节点资源不足、分片数大于节点数、磁盘水位过高、分片分配策略限制。解决思路:1.查看集群分片分配日志,定位未分配副本原因;2.清理磁盘空间,释放磁盘占用,解除磁盘阈值限制;3.调整副本数,适配当前集群节点数量;4.重启异常节点,等待分片自动同步恢复;5.手动开启分片分配,修复异常分片。22、ES磁盘使用率过高,如何紧急处理和长期优化?参考答案:紧急处理:1.删除无用临时索引、过期日志索引;2.执行force_merge合并分段,清理标记删除的垃圾数据;3.临时调高磁盘水位阈值,避免集群只读。长期优化:1.开启索引生命周期管理(ILM),自动过期、归档、删除冷数据索引;2.优化

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论