ES面试题系列「一」

1、Elasticsearch 是什么?它与传统数据库有什么区别?

答案:Elasticsearch 是一个基于 Lucene 的分布式、开源的搜索和分析引擎,主要用于处理大量的文本数据,提供快速的搜索和分析功能。与传统数据库相比,ES 更侧重于全文搜索和实时数据分析,数据以 JSON 格式存储,具有更好的扩展性和灵活性,而传统数据库擅长事务处理和结构化数据的存储与查询。

2、什么是倒排索引?它是如何工作的?

答案:倒排索引是 Elasticsearch 的核心数据结构。它从词出发,记载了每个词在哪些文档中出现过,由词典和倒排表组成。在构建倒排索引时,会对文档进行分词处理,将文档拆分成词条,然后建立词条与文档 ID 的映射关系。查询时,通过查找词条在倒排索引中的位置,快速定位到包含该词条的文档。

3、Elasticsearch 中的索引、文档和字段分别是什么?

答案:索引类似于关系数据库中的数据库,是具有相同结构的文档的集合;文档是 ES 中最小的存储单位,相当于关系数据库中的一条记录,以 JSON 格式存储;字段是文档中的属性,类似于关系数据库中的列,每个字段都有其数据类型。

4、如何理解 Elasticsearch 中的分片和副本?

答案:分片是为了提高 ES 的存储和查询性能,将索引分成多个部分,分布在不同的节点上。副本是每个分片的备份,用于提高可用性和容错性,当主分片出现故障时,副本可以替代主分片提供服务。合理设置分片和副本数量可以平衡系统的性能、可用性和成本。

5、Elasticsearch 是如何实现 Master 选举的?

答案:前置前提是只有候选主节点(master:true)的节点才能成为主节点,并且要满足最小主节点数(min_master_nodes)以防止脑裂。选举流程大致为:第一步,确认候选主节点数达标,即满足 elasticsearch.yml 设置的 discovery.zen.minimum_master_nodes 的值;第二步,比较节点,先判定是否具备 master 资格,具备候选主节点资格的优先返回;若两节点都为候选主节点,则 id 小的值会成为主节点,这里的 id 为 string 类型。

6、详细描述一下 Elasticsearch 索引文档的过程。

答案:第一步,客户端向集群中的某节点写入数据,发送请求,如果没有指定路由 / 协调节点,请求的节点扮演路由节点的角色;第二步,节点接收到请求后,使用文档_id 来确定文档属于哪个分片,请求会被转到对应的主分片所在节点;第三步,主分片所在节点在主分片上执行写操作,如果成功,则将请求并行转发到其他副本分片上,等待结果返回。所有的副本分片都报告成功后,主分片所在节点将向协调节点报告成功,协调节点再向请求客户端报告写入成功。

7、Elasticsearch 的查询流程是怎样的?

答案:首先,客户端发送搜索请求,请求中包含查询条件、索引名称等信息。Elasticsearch 根据搜索请求中指定的索引名称和查询条件,确定哪些分片包含符合查询条件的文档数据,然后并行地向这些分片发送搜索请求,每个分片在本地执行相应的查询操作并返回部分结果。接着,Elasticsearch 将这些部分结果汇总起来,并根据查询要求对结果进行排序,最后将搜索结果返回给客户端。

8、在 Elasticsearch 中,如何进行索引数据的调优?

答案:可以从设计阶段、写入阶段、查询阶段等方面进行调优。设计阶段,根据业务增量需求,采取基于日期模板创建索引,使用别名进行索引管理,合理设置分词器,充分考虑字段属性等;写入阶段,写入前可将副本数设置为 0,关闭 refresh_interval,写入过程中采用 bulk 批量写入,写入后恢复副本数和刷新间隔,尽量使用自动生成的 id;查询阶段,禁用 wildcard 和批量 terms,充分利用倒排索引机制,能使用 keyword 类型尽量使用 keyword,数据量大时先基于时间敲定索引再检索,设置合理的路由机制等。

9、什么是 Elasticsearch 中的 Mapping?它有什么作用?

答案:Mapping 定义了文档的结构,包括字段的数据类型、索引方式、分析器等信息。它的作用是告诉 Elasticsearch 如何解析和存储文档中的数据,以及如何对字段进行索引和搜索,确保数据能够被正确地处理和查询。

10、Elasticsearch 支持哪些数据类型?

答案:常见的数据类型有文本类型(text)、关键字类型(keyword)、日期类型(date)、数值类型(如 integer、long、float、double 等)、布尔类型(boolean),还有二进制类型(binary)、地理空间类型(geo - point、geo - shape)等。

相关推荐
小小工匠36 分钟前
Elasticsearch - Reroute 深度剖析:分片调度与集群恢复不完全指北
elasticsearch·reroute
十六年开源服务商36 分钟前
WordPress站内SEO优化最佳实践指南
大数据·开源
搞科研的小刘选手39 分钟前
【北京师范大学主办】第三届信息化教育与计算机技术国际学术会议(IECA 2026)
大数据·计算机技术·学术会议·教育学·stem
expect7g1 小时前
Paimon源码解读 -- Compaction-4.KeyValueFileStoreWrite
大数据·flink
uhakadotcom1 小时前
Python Protobuf 全面教程:常用 API 串联与实战指南
前端·面试·github
刘洋浪子2 小时前
Git命令学习
git·学习·elasticsearch
老蒋新思维2 小时前
创客匠人 2025 万人峰会核心:AI 驱动知识产品变现革新
大数据·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现
expect7g2 小时前
Paimon源码解读 -- FULL_COMPACTION_DELTA_COMMITS
大数据·后端·flink
shoa_top2 小时前
一文带你掌握 JSONP:从 Script 标签到手写实现
前端·面试
知其然亦知其所以然2 小时前
小米的奇幻编程之旅:当 JavaScript 语法变成了一座魔法城
前端·javascript·面试