版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Elasticsearch高频面试题及详细答案(实战向)一、基础概念篇1、简单介绍一下Elasticsearch,以及它的适用场景?Elasticsearch是一款基于Lucene实现的分布式、可扩展、实时的全文检索与数据分析引擎,采用Java开发,主打海量数据的快速检索、模糊匹配、聚合分析。它支持水平扩容,自带集群机制,数据实时近实时刷新,易用性很高。适用场景主要有四类:全文检索:商品搜索、文档检索、日志检索、站内搜索,支持分词、模糊、高亮、精准匹配。日志与监控分析:搭配Logstash、Kibana实现ELK日志收集、检索、统计、可视化。海量数据聚合统计:订单统计、用户行为分析、业务指标实时汇总,比数据库聚合性能高很多。时序数据存储检索:系统监控指标、接口调用记录、埋点日志存储查询。不适合场景:高频事务写入、强一致性数据、核心交易数据存储,这类场景优先用MySQL。2、Elasticsearch核心概念:索引、文档、类型、分片、副本分别是什么?索引(Index):相当于数据库的库,是一类结构化数据的集合,所有文档都存放在索引中。文档(Document):ES最小数据单元,相当于数据库的一行数据,JSON格式存储。类型(Type):旧版本用于区分索引内不同数据类型,7.0之后彻底废弃,一个索引只存一种数据类型。主分片(PrimaryShard):索引数据拆分后的真实数据分片,负责读写请求,主分片数量创建索引后不可修改。副本分片(ReplicaShard):主分片的备份,负责分担读请求、故障容灾,副本数量可以动态调整,且副本不会和主分片在同一节点。3、ES为什么是近实时搜索,不是实时?ES默认的索引刷新间隔是1秒。数据写入后,先写入内存缓冲区,不会立刻生成可检索的索引文件,等待刷新后才会写入文件缓存、对外可见。简单来说:写入成功不代表立刻能查到,等待1秒左右即可检索到新数据,所以是近实时。如果业务需要强实时,可以手动刷新索引,但会大幅降低写入性能,一般不推荐。4、ES和MySQL的核心区别?存储结构:MySQL是行式结构化存储;ES是JSON文档存储,无固定表结构,字段可动态新增。检索能力:MySQL仅支持精准匹配、前缀索引,全文检索能力弱;ES支持分词、模糊、高亮、聚合、地理位置检索,检索能力极强。事务一致性:MySQL支持ACID事务、强一致性;ES不支持事务,仅支持最终一致性。写入查询性能:MySQL适合高频事务写入;ES适合海量数据检索、聚合,写入性能优于数据库,查询速度远超数据库。使用场景:MySQL存核心业务、交易数据;ES存检索、日志、统计类数据。二、索引与映射(Mapping)篇1、Mapping是什么?动态映射和静态映射的区别?Mapping相当于数据库的表结构,用来定义索引中字段的名称、数据类型、分词规则、是否索引、是否存储等属性。动态映射:写入数据时,ES自动识别字段类型并创建映射,开发方便,但容易出现类型识别错误,比如数字识别为字符串、日期识别异常,生产环境不推荐。静态映射:手动提前定义好所有字段类型、分词器、索引属性,类型可控、数据规范,生产环境统一使用静态映射。2、ES常用字段数据类型有哪些?字符串类型:text(可分词,用于检索)、keyword(不分词,用于精准匹配、聚合、排序)。数值类型:integer、long、float、double。日期类型:date,支持格式化存储和检索。布尔类型:boolean。复杂类型:object对象、nested嵌套对象(解决对象数组扁平化问题)。特殊类型:ip、geo_point地理位置等。3、text和keyword的核心区别,工作中怎么选用?text:会进行分词,拆分多个词条,支持模糊检索、全文搜索,不支持聚合、精准匹配、排序。适用于文章内容、商品标题、描述等需要搜索的字段。keyword:不分词,完整作为一个词条存储,支持精准匹配、聚合、分组、排序,不支持模糊全文检索。适用于手机号、账号、状态码、分类、标签等固定值字段。常规业务最佳实践:核心搜索字段设置text,同时配置keyword子字段,兼顾搜索和聚合排序需求。4、为什么ES不允许修改字段类型?ES的字段类型直接决定了分词方式、索引结构、存储结构。一旦数据写入,倒排索引已经生成,如果修改字段类型,原有所有数据的索引都会失效,会引发数据错乱、查询异常。如果必须修改类型,只能新建索引、重新定义mapping,再通过reindex迁移数据,删除旧索引。三、分词器与检索原理篇1、ES分词流程是什么?整体分为三步:字符过滤:去除特殊符号、替换字符、过滤无效内容。分词处理:按照分词规则将文本拆分为多个词条。词条处理:小写转换、去除停用词、同义词替换,最终生成可检索的term词条。2、常用分词器有哪些?生产一般用什么?standard:默认分词器,英文友好,中文单字分词,效果差。ik分词器:主流中文分词器,支持细粒度和粗粒度分词,生产环境首选。pattern分词器:正则分词,适合固定格式文本。3、倒排索引原理是什么?传统数据库是正排索引,通过文档ID查内容;ES采用倒排索引,核心是词条映射文档。流程:文本分词后生成多个词条,记录每个词条对应的文档ID、出现频次、位置。检索时,先通过词条找到所有关联文档,再根据相关性打分排序,极大提升海量数据查询速度。4、Match和Term查询的区别?Term:精准查询,不对查询内容分词,完全匹配词条,适合keyword、数值、日期字段。Match:模糊检索,会对查询关键词分词,部分匹配即可命中,适合text全文检索字段。常见坑:用term查询text字段大概率查不到数据,因为text字段已分词,词条和原文本不一致。5、ES相关性打分原理?新版本默认使用BM25算法,旧版本用TF-IDF。核心逻辑:词条在文档中出现频次越高、权重越高;词条在全局文档中出现越少、区分度越高,分数越高。同时会规避文档越长分数越高的问题,结果排序更精准。四、集群与分片原理篇1、集群中Master节点、Data节点、Client节点作用?Master节点:负责集群管理、节点监控、分片分配、索引创建删除、集群状态同步,不处理数据读写,压力小。Data节点:负责数据存储、读写请求、分片管理、聚合计算,集群核心压力节点。Client节点:协调节点,接收客户端请求,分发请求到对应数据节点,汇总结果返回前端,不存储数据。2、主分片和副本分片的工作机制?写入请求只会写入主分片,主分片写入成功后,同步同步到所有副本分片,保证数据备份。读请求可以同时走主分片和副本分片,分担查询压力,提升查询吞吐量。如果某个节点宕机,集群会自动检测,将宕机节点的主分片对应的副本提升为主分片,再重新分配新副本,保证集群高可用。3、分片数量设置的原则?为什么主分片不能改?主分片是数据拆分的最小单元,索引创建时就固定了数据哈希分片规则,修改主分片数量会导致所有数据分片位置错乱,无法恢复,所以不可修改。分片设置原则:单分片数据量控制在20G-50G最佳,过大查询慢,过小分片过多消耗资源。主分片数量和数据节点数量匹配,避免分片分配不均。副本数量根据集群节点数调整,保证容灾。4、集群脑裂问题是什么?怎么解决?脑裂是集群网络波动时,集群节点分裂成多个小集群,各自选举master,导致集群状态混乱、数据不一致、读写异常。解决方案:设置最小主节点数(discovery.zen.minimum_master_nodes),保证只有满足节点数量要求的集群才能选举master,避免小集群独立生效。新版ES已优化该机制。五、写入、更新、删除机制篇1、ES数据写入流程?客户端请求发送到协调节点。协调节点根据文档id哈希路由,找到对应主分片节点。数据写入主分片,主分片校验、写入内存缓冲区、写入translog事务日志。主分片同步数据到副本分片。全部成功后,返回写入成功给客户端。2、Translog日志的作用?ES为了提升性能,数据先写内存,不会立刻落盘。如果节点宕机,内存数据会丢失。Translog相当于事务日志,记录每一次写入操作,持久化到磁盘。节点重启后,通过translog回放未落盘数据,保证数据不丢失。索引刷新、合并段后会清空对应日志。3、ES的更新和删除为什么是伪更新、伪删除?ES底层基于Lucene分段存储,段文件只读,不支持修改和删除。更新:旧文档标记删除,写入一条新文档,查询时取最新版本。删除:文档仅标记删除,不会立刻物理删除,等待段合并时统一清理。这也是数据频繁更新删除后,ES磁盘占用高、查询变慢的原因,需要定期段合并优化。4、段合并的作用和影响?段合并会将多个小文件合并为大文件,清理标记删除的无效数据,减少文件数量,提升查询效率,释放磁盘空间。缺点:段合并过程会大量消耗CPU、磁盘IO,业务高峰期触发会导致集群卡顿,生产一般配置低峰期自动合并或手动控制。六、性能调优篇(面试高频)1、ES查询慢的常见原因和优化方案?常见原因:字段类型使用错误,text字段做聚合排序,keyword字段做全文检索。查询语句不规范,使用大量wildcard全模糊、嵌套复杂聚合。分片设置不合理,单分片数据过大或分片过多。数据频繁更新删除,产生大量删除标记,段文件碎片化。内存分配不合理,堆内存过大或过小。优化方案:规范字段类型,检索用text,聚合排序用keyword。避免前置全模糊查询,优化DSL语句,减少无效聚合。合理规划分片大小,控制单分片数据量。定期执行段合并,清理无效数据。合理设置JVM堆内存,不超过31G,物理内存预留系统缓存。高频查询结果可开启查询缓存。2、ES写入性能优化方案?使用bulk批量写入,代替单条写入,减少网络交互。调大刷新间隔,降低刷新频率,减少磁盘写入次数。批量写入阶段临时关闭副本,写入完成后再开启。合理设置translog刷盘策略,异步刷盘提升吞吐量。避免频繁更新删除数据,减少段碎片。3、JVM堆内存设置原则?最大不超过31G,超过后JVM压缩指针失效,内存占用暴增。最小和最大堆内存设置一致,避免内存伸缩卡顿。预留一半系统内存给系统缓存、Lucene缓存,提升检索性能。七、故障排查与实战问题篇1、索引变红、变黄分别代表什么?黄色:主分片正常,部分副本分片未分配、丢失、异常,集群可读可写,存在容灾风险。红色:部分主分片未分配、丢失,索引数据不完整,读写异常,业务受影响。2、磁盘爆满怎么处理?清理过期无用索引、日志索引,释放空间。手动触发段合并,清理已删除无效数据。调整磁盘水位线,临时解除只读限制,扩容磁盘。优化数据生命周期,配置索引自动删除策略。3、深度分页问题是什么?如何解决?ES使用from+size分页时,深度分页需要查询所有分片数据、全局排序、丢弃前置数据,页码越深,内存和CPU消耗越大,页码过大直接报错。解决方案:常规业务限制最大分页页码,禁止深度分页。海量数据遍历使用scroll滚动查询。实时精准分页使用search_after方式,无页码限制,性能更高。4、Nested嵌套对象的作用,解决什么问题?普通object数组存储对象时,ES会扁平化数据,导致不同对象的字段错乱匹配,查询结果异常。Nested类型可以将每个数组对象独立存储,保证对象内部数据关联匹配,互不干扰,专门解决对象数组查询错乱问题。缺点是查询和聚合性能比普通字段稍低。八、高阶面试真题1、ES如何实现数据同步?和MySQL同步方案有哪些?主流两种方案:Logstash同步:定时查询MySQL增量数据同步,简单易搭建,适合低并发场景,延迟较高。Canal同步:监
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年团风县教师招聘笔试备考题库及答案解析
- 2026年萧县教师招聘笔试备考题库及答案解析
- 2026天津市东丽区消防救援局招录政府专职消防员50人考试参考题库及答案解析
- 南充市嘉陵区嘉虹幼儿园2026年秋自主招聘教师笔试备考题库及答案解析
- 2026年峡江县教师招聘考试参考题库及答案解析
- 2026年六安安徽万佛湖投资控股有限公司公开招聘6名工作人员笔试备考试题及答案解析
- 2026交通银行宁波分行校园招聘笔试备考试题及答案解析
- 2026年闽南科技学院教师招聘27人笔试备考题库及答案解析
- 2027年国网黑龙江省电力有限公司校园招聘考试模拟试题及答案解析
- 2026广西河池市巴马县百林乡人民政府招聘交通协管员1人考试备考题库及答案解析
- T/CI 1040-2025配网线路无人机自主巡检应用规范
- ISO 9001-2026 换版深度解读:36条条款逐条对比与企业换版行动指南
- 2026年云南中考化学真题(解析版)
- 2025年全国人大机关公开遴选公务员真题(附答案)
- 房屋租金评估实施方案
- 中国广电山东网络有限公司2026年度市县公司招聘145个模拟试卷附答案
- 光伏组件清洗服务合同协议2025年安全规范
- 中西方大学教育的异同
- 重师新生入学教育考试试题及答案
- 物业服务内控方案(3篇)
- 糖尿病酮症酸中毒合并急性胰腺炎护理查房
评论
0/150
提交评论