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)等。

相关推荐
Elastic 中国社区官方博客6 小时前
快速 vs. 准确:衡量量化向量搜索的召回率
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
qq_381338506 小时前
【技术日报】2026-03-18 AI 领域重磅速递
大数据·人工智能
发现一只大呆瓜7 小时前
React-彻底搞懂 Redux:从单向数据流到 useReducer 的终极抉择
前端·react.js·面试
零雲8 小时前
java面试:了解抽象类与接口么?讲一讲它们的区别
java·开发语言·面试
uzong8 小时前
Skill 被广泛应用,到底什么是 Skill,今天详细介绍一下
人工智能·后端·面试
发现一只大呆瓜9 小时前
React-路由监听 / 跳转 / 守卫全攻略(附实战代码)
前端·react.js·面试
电商API&Tina10 小时前
【电商API接口】开发者一站式电商API接入说明
大数据·数据库·人工智能·云计算·json
消失的旧时光-194311 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
yuhaiqiang11 小时前
被 AI 忽悠后,开始怀念搜索引擎了?
前端·后端·面试
li星野12 小时前
[特殊字符] Linux/嵌入式Linux面试模拟卷
linux·运维·面试