Top 41 Elasticsearch 面试题及答案2025年5月18日 | 阅读 13 分钟 1) 什么是 Elasticsearch?Elasticsearch 是一个基于 Apache Lucene 的NoSQL 数据库搜索引擎。它是一个用 Java 开发的开源产品。与 MySQL 和其他数据库类似,它也用于存储数据。Elasticsearch 以文档格式存储非结构化数据。它提供 NRT(近实时搜索)功能,并允许对数据执行全文搜索。 Elasticsearch 易于部署和管理。用户甚至可以通过设置一些配置并执行查询来非常轻松高效地备份 Elasticsearch 中的数据。 2) 谁开发的 Elasticsearch?何时开发的?Elasticsearch 于2010 年 2 月首次发布。它由Shay Banon开发。Elasticsearch 基于 Apache 2.0 许可证。 3) Elasticsearch 的最新版本是什么?何时发布的?Elasticsearch 7.9.1 是 Elasticsearch 的最新稳定版本。在2020 年 9 月 3 日,Elasticsearch 社区发布了 Elasticsearch 的最新版本。 4) 定义 Elasticsearch 最重要的特性?虽然 Elasticsearch 有很多特性,但这里有一些最重要的特性 -
5) 可以对 Elasticsearch 执行哪些基本操作?Elasticsearch 允许用户使用 Elasticsearch 执行以下基本操作 -
6) 访问 Elasticsearch 的 Web 端口号是多少?可以更改吗?Elasticsearch 在 Web 上通过HTTP 协议访问,这需要与 localhost 地址一起使用端口号。Elasticsearch 的默认端口号是9200。 如果 Elasticsearch 端口 9200 已在使用中或被其他工具占用,您可以更改端口号。Elasticsearch 端口号可以在 elasticsearch.yml 文件中更改。该文件位于 config 文件夹内。 7) 使用 Elasticsearch 的基本要求是什么?要使用 Elasticsearch,必须满足以下要求 -
8) Elasticsearch 中的索引是什么?Elasticsearch 中的索引相当于 MySQL 关系数据库结构中的一个数据库。一个索引包含多个类型(表)和其中的文档。Elasticsearch 可以有多个索引。 Elasticsearch -> Index -> Type -> Document with properties MySQL -> Database -> Table -> Columns/Rows 通常,我们可以说索引是包含信息的文档的集合。它可以存储实际值和分析后的值。 9) Elasticsearch 是否为用户提供交互式图形用户界面?否,Elasticsearch 不提供自己的图形用户界面 (GUI)。我们通过批处理文件(即 elasticsearch.bat)运行它,该文件提供命令行界面 (CLI)。 要与 Elasticsearch 交互,我们必须安装插件或数据可视化工具。有几种可用的插件,例如 elasticsearch-head、icu-analyzer 等。尽管如此,您还可以安装 Kibana 进行数据可视化,它是 ELK Stack 的一个重要组成部分。 要与 Elasticsearch 交互,我们必须安装插件或数据可视化工具。有几种可用的插件,例如 elasticsearch-head、icu-analyzer 等。尽管如此,您还可以安装 Kibana 进行数据可视化,它是 ELK Stack 的一个重要组成部分。10) 什么是 ELK stack?Elasticsearch 如何与其连接?ELK Stack 由三个组件组成 - Elasticsearch、Logstash 和 Kibana。ELK stack 的每个组件都有不同的用途。
ELK Stack 的这三个组件协同工作,为用户执行任务提供重要服务。尽管 Elasticsearch 也可以单独使用。 11) Elasticsearch 中的分词器 (tokenizer) 是什么?分词器用于从文本字符串生成词元 (token)。当遇到空格或其他标点符号时,它会将文本字符串分解成词元。Elasticsearch 提供了许多内置的分词器来从字符串生成词元。标准分词器是 Elasticsearch 中最受欢迎的分词器之一,通常用于将字符串分解成多个词元。 此外,Elasticsearch 还提供了许多其他分词器,例如 - 小写分词器、空格分词器、模式分词器、关键词分析器、Ngram 分词器等。通常,分词器有助于分析文本字符串。 12) Elasticsearch 中的分析器 (analyzer) 是什么?分析器有助于在将数据索引到 Elasticsearch 时对其进行转换。它会转换索引中内部定义的数据,然后对其进行索引。分词器和过滤器共同构成了一个分析器。 Elasticsearch 提供的分析器类型如下 -
13) 什么是 Elasticsearch 中的冻结索引 (frozen indices)?冻结索引是指很少访问的索引。因此,用户会冻结这些索引。这些索引被称为冻结索引。基本上,我们冻结那些不使用的索引以释放内存。 冻结索引会变为只读,其资源不再保持活动状态。因此,这些索引是可搜索的,但要再次写入,我们需要解冻它们。Elasticsearch 提供了一个ignore_throttled 参数,用于将冻结索引包含在搜索中。因此,我们无需重新打开它们即可进行搜索。 14) 什么是 Elasticsearch Mapping?Mapping 是 Elasticsearch 对文档和字段执行的一种机制。它负责在 Elasticsearch 数据库中存储和索引文档及其字段。Elasticsearch 允许用户通过定义字段的数据类型来执行字段映射。 例如:- name 的字符串数据类型,age 的数字数据类型等。 Mapping 有两种类型,即静态映射 (Static mapping) 和动态映射 (Dynamic mapping)。 静态映射是用户在创建索引时进行的映射。相比之下,动态映射是由 Elasticsearch 自动为表进行的。 15) 如何删除 Elasticsearch 中的索引?要删除 Elasticsearch 中的索引,您需要创建一个请求方法为 DELETE 并且带有要删除的索引名称的查询。 16) 您对 Elasticsearch 中的 NRT 有何理解?NRT 指的是近实时搜索平台。Elasticsearch 为用户提供近实时搜索功能。当我们对其执行搜索操作时,它会在很短的时间内返回数据。每当您索引一个文档时,Elasticsearch 会花费一点时间,直到它变得可搜索。 17) 什么是 Elasticsearch API?API 是应用程序编程接口,它使得 Elasticsearch 易于操作、管理和创建查询以对其执行操作。Elasticsearch 提供 REST API 以多种方式对其进行管理、集成和执行各种操作。它提供了广泛的 API 和方法。通常,Elasticsearch 中有五种类型的 API:
18) 您对多文档 API (multi-document APIs) 有何理解?多文档 API 是一种文档 API,它还有一些其他 API。多文档 API 主要用于跨多个文档执行查询。简单地说,它允许用户通过单个查询批量执行操作,如获取或更新多个文档。 它进一步分类并具有以下用于批量操作的 API -
19) 使用哪种方法从 Elasticsearch 获取文档?Elasticsearch 允许用户通过两种方式搜索和获取数据库中的文档。我们可以根据情况使用其中一种 -
除了请求方法,我们还需要使用__search API 来搜索数据库中的文档。这里的 GET 和 POST 是请求方法。Elasticsearch 允许用户单独或批量搜索文档。 20) Elasticsearch 使用哪种查询语言?Elasticsearch 使用Query DSL 来对其执行操作。Query DSL 是 Apache Lucene 查询语言。 21) 什么是 Elasticsearch 中的集群 (cluster)?在 Elasticsearch 中,集群是节点的集合。集群和节点协同工作并保存数据,其中节点是 Elasticsearch 的一个实例。集群为 Elasticsearch 用户提供联合索引和搜索功能。 Elasticsearch 可以有多个集群,每个集群由唯一名称标识。Elasticsearch 为集群提供默认名称,即elasticsearch。 22) Elasticsearch 有模式 (schema) 吗?是的,Elasticsearch 有一个模式,通常称为 mapping。基本上,模式是字段的描述,它描述了文档的类型。它有助于管理文档的不同字段。 模式是一种强调 JSON 文档的映射。 23) 在 Elasticsearch 中定义文档 (document)?在 Elasticsearch 中,文档包含 Elasticsearch 用户提供的信息。文档类似于 MySQL 等关系数据库中的行。文档存储在用户创建的索引中。一个索引可以包含多个文档,每个文档都有一个唯一的 ID。 文档以键值对 (key: value) 的形式包含数据。例如,{"name": "Alen Walker"}。每个文档都由一个唯一的 ID 标识,并且与一个类型相关联。 24) 什么是 Elasticsearch 中的文档类型 (document type)?在 Elasticsearch 中,类型代表一类相似的文档。类型可以是 student、customer 或 item。文档类型可以看作是文档的模式/映射,它包含了文档中所有字段及其数据类型的映射。 25) 什么是 Elasticsearch 中的分片 (shard)?索引中存储的数据可以分成多个分区。这些分区中的每一个都称为分片,由单独的节点管理和控制。一个 Elasticsearch 索引默认有五个分片。 26) 说出至少 5 家使用 Elasticsearch 的公司?以下是使用 Elasticsearch 的公司列表 -
还有许多其他公司使用 Elasticsearch 来存储和管理其非结构化数据。 27) 什么是 Elasticsearch 中的索引生命周期管理 (Index Lifecycle Management)?索引生命周期管理 (ILM) 是 Elasticsearch 的一个重要机制,它在 Elasticsearch 6.6 中引入。它也被称为 ILM。ILM 建立了热-温-冷 (hot-warm-cold) 架构,为索引提供了生命周期。这个生命周期有四个状态:热、温、冷和删除状态。 索引经过这个生命周期,具有不同的状态,首先它经历热状态,然后是温和冷,最后是删除状态。 通常,ILM 管理索引及其操作。Elasticsearch 提供 ILM API 来管理索引。策略管理 API、索引管理 API 和操作管理 API 是索引生命周期管理 API。这些 API 进一步为用户提供管理索引的 API。 28) 可以对文档执行哪些基本操作?Elasticsearch 允许对索引执行各种操作,例如 -
29) 您对 Elasticsearch 中的倒排索引 (inverted index) 有何理解?倒排索引是搜索引擎的核心。每个搜索引擎的主要目的是在查找文档时提供快速高效的搜索。通常,倒排索引就像一个哈希映射数据结构,将用户从单词指向文档或网页。当您在数百万个文档中搜索文档时,它提供了快速的搜索。 30) 什么是 Elasticsearch 中的 from 和 size 组件?from 和 size 组件用于分页。它们有助于将大量数据分成多个页面,其中 from 是开始搜索的初始点,size 定义要搜索的项目数。 例如:- 如果计算出有 30 个项目,但我们首先想要 15 个项目,然后是剩余的。 所以,第一次 from 是 0,size 是 14。下一次 from 是 15,size 是 29。 31) match 和 term 查询之间的区别。Match 查询会分析输入请求并创建基本查询。而在 term 查询中,执行精确匹配。 例如,如果我们搜索包含name: Anurag 的文档,如果任何文档的 name = Anupriya,那么在 Match 查询的情况下,它也将是搜索查询的结果。另一方面,term 查询执行精确匹配。因此,包含 name: Anupriya 的文档不会返回。 32) 要安装 Elasticsearch,需要在不同操作系统上下载哪种类型的文件?在每个操作系统上,都需要下载不同类型的文件。 例如 -
33) Elasticsearch 可以与其他工具集成吗?如果可以,请列出这些工具的名称?是的,Elasticsearch 可以与其他工具和技术集成。最流行的工具是 Logstash 和 Kibana,它们是 ELK stack 的组成部分。还有一些其他工具可以与 Elasticsearch 集成 -
34) 您对集群健康 (cluster health) 有何理解?如何检查集群的健康状况?在 Elasticsearch 中,我们可以检查集群的健康状况。集群健康有助于显示集群的健康状态。它定义了当前在 Elasticsearch 中有多少集群正在运行。健康状态通过三种不同的颜色显示,即红色、绿色或黄色。每种颜色代表集群的不同健康状态。 红色颜色表示集群中某些主分片或节点不可用。 红色 - 当集群中某些主分片或节点不可用时,集群健康状况将为红色。 黄色 - 当某些或所有分片未分配给集群中的任何节点时,集群健康状况将为红色。 绿色 - 当分片已分配给节点时,集群健康状况将为红色。 通过执行简单的集群健康检查,我们可以检查集群的健康状况。 此处 GET 是请求方法,_cluster 是集群 API,health 是我们正在查找的关键字。 35) 可以对冻结索引执行写入操作吗?否,我们不能对冻结索引执行写入操作,因为冻结索引是只读索引。这些索引是可搜索的,但我们无法在不解冻的情况下对其进行写入。但是,在不解冻冻结索引的情况下,我们可以将其包含在我们的搜索中。 36) X-pack 如何帮助获得 Elasticsearch 的 SQL 访问权限?X-pack 提供了 SQL 功能,为 Elasticsearch 提供了 SQL 访问权限以执行查询。此 SQL 支持功能已在Elasticsearch 6.3 中引入。 基本上,X-pack 是一个具有 SQL 功能的 Elastic Stack 扩展,它帮助用户针对 Elasticsearch 执行 SQL 查询。SQL 查询在实时环境中执行,并以表格形式返回结果。 我们可以使用 bin 文件夹中的 elasticsearch-sql-cli.bat 文件通过 Elasticsearch SQL 命令行执行。这个 Elasticsearch SQL 翻译器可以理解 SQL 和 Elasticsearch。 37) 什么是 Elasticsearch 中的 Ingest Node?Ingest Node 用于在将文档索引到 Elasticsearch 之前对其进行转换。基本上,Ingest Node 在索引发生之前预处理文档。诸如重命名字段、添加或删除文档中的字段等操作由 Ingest Node 处理。 38) 什么是存储库 (repository),它在 Elasticsearch 中创建快照 (snapshot) 的作用是什么?存储库是一个容器或内存存储,用于保存其中的快照。一个存储库可以存储一个或多个快照。快照就是用户为了释放内存和保护数据而创建的 Elasticsearch 数据备份。 您可以在 Elasticsearch 中创建任意数量的存储库,每个存储库都可以包含其中的多个快照。存储库提供了存储快照的位置和内存。 39) 为什么以及如何配置 path.repo?要创建存储库,我们需要设置一个存储它的位置。因此,在创建快照之前,非常重要的是在 elasticsearch.yml 文件中配置 path.repo 设置,在该设置中我们需要为要存储的存储库设置位置。elasticsearch.yml 文件位于 elasticsearch/config 文件夹内。 配置步骤
40) 为什么要使用 wait_for_completion 参数?Elasticsearch 提供了一个 wait_for_completion 参数,该参数在创建快照查询时使用。此参数主要用于快照查询,指示请求是等待快照完成,还是在快照初始化后立即响应。它是一个可选参数,用作 wait_for_completion=true。 它用于如下快照查询 请注意,如果您在查询中使用 wait_for_completion 参数,快照创建过程将在 Elasticsearch cli 上在后台运行。41) Restore API 的作用是什么?Elasticsearch 提供 _restore API 来恢复备份到快照的数据。因此,restore API 有助于将快照恢复到正在运行的集群。 要将数据恢复到 Elasticsearch,需要同时使用 _snapshot 和 _restore API 以及您要恢复的快照名称。例如 -
|
我们请求您订阅我们的新闻通讯以获取最新更新。