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 有很多特性,但这里有一些最重要的特性 -

  1. 开源产品
  2. 它提供REST API Web 界面。
  3. 多语言和地理位置支持
  4. 存储非结构化数据
  5. 支持全文搜索以及无模式数据库
  6. 数据近实时 (NRT) 搜索功能

5) 可以对 Elasticsearch 执行哪些基本操作?

Elasticsearch 允许用户使用 Elasticsearch 执行以下基本操作 -

  1. 创建索引
  2. 更新索引
  3. 从索引获取数据
  4. 删除索引
  5. 冻结索引

6) 访问 Elasticsearch 的 Web 端口号是多少?可以更改吗?

Elasticsearch 在 Web 上通过HTTP 协议访问,这需要与 localhost 地址一起使用端口号。Elasticsearch 的默认端口号是9200

如果 Elasticsearch 端口 9200 已在使用中或被其他工具占用,您可以更改端口号。Elasticsearch 端口号可以在 elasticsearch.yml 文件中更改。该文件位于 config 文件夹内。


7) 使用 Elasticsearch 的基本要求是什么?

要使用 Elasticsearch,必须满足以下要求 -

  • 您应该熟悉 JSON 对象、API 和文档格式,因为数据在 Elasticsearch 中以文档的形式存储。
  • 除了知识,您的系统还必须安装 Java 才能安装 Elasticsearch。
  • 一个用于与 Elasticsearch 交互的插件,例如 elasticsearch-head 插件(可在 Google Play 商店找到)。

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 的每个组件都有不同的用途。

  • Elasticsearch 是一个 NoSQL 数据库工具,用于存储非结构化数据。
  • Logstash 是一个日志管道工具,用于对数据进行转换。它从不同来源获取输入并对其进行各种转换。最后,它将数据导出到各种目标。
  • Kibana 是一个数据可视化工具,为用户提供交互式 UI(用户界面)进行数据可视化。

ELK Stack 的这三个组件协同工作,为用户执行任务提供重要服务。尽管 Elasticsearch 也可以单独使用。


11) Elasticsearch 中的分词器 (tokenizer) 是什么?

分词器用于从文本字符串生成词元 (token)。当遇到空格或其他标点符号时,它会将文本字符串分解成词元。Elasticsearch 提供了许多内置的分词器来从字符串生成词元。标准分词器是 Elasticsearch 中最受欢迎的分词器之一,通常用于将字符串分解成多个词元。

此外,Elasticsearch 还提供了许多其他分词器,例如 - 小写分词器、空格分词器、模式分词器、关键词分析器、Ngram 分词器等。通常,分词器有助于分析文本字符串。


12) Elasticsearch 中的分析器 (analyzer) 是什么?

分析器有助于在将数据索引到 Elasticsearch 时对其进行转换。它会转换索引中内部定义的数据,然后对其进行索引。分词器和过滤器共同构成了一个分析器。

Elasticsearch 提供的分析器类型如下 -

  • 标准分析器
  • 空格分析器
  • 简单分析器
  • 关键词分析器
  • 模式分析器
  • 停用词分析器
  • 语言分析器
  • Snowball 分析器

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:

  1. 文档 API
  2. 搜索 API
  3. 聚合 API
  4. 索引 API
  5. 集群 API

18) 您对多文档 API (multi-document APIs) 有何理解?

多文档 API 是一种文档 API,它还有一些其他 API。多文档 API 主要用于跨多个文档执行查询。简单地说,它允许用户通过单个查询批量执行操作,如获取或更新多个文档。

它进一步分类并具有以下用于批量操作的 API -

  • 批量 API
  • 多获取 API
  • 按查询删除 API
  • 按查询更新 API
  • 重新索引 API

19) 使用哪种方法从 Elasticsearch 获取文档?

Elasticsearch 允许用户通过两种方式搜索和获取数据库中的文档。我们可以根据情况使用其中一种 -

  • 通过发送带有查询字符串参数的 GET 请求,或
  • 通过发送在请求正文中包含查询的 POST 请求。

除了请求方法,我们还需要使用__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 的公司列表 -

  • Netflix
  • Udemy
  • Shopify
  • 沃尔玛
  • 优步
  • Slack
  • Adobe

还有许多其他公司使用 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 中的 fromsize 组件?

fromsize 组件用于分页。它们有助于将大量数据分成多个页面,其中 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,需要在不同操作系统上下载哪种类型的文件?

在每个操作系统上,都需要下载不同类型的文件。

例如 -

  • Windows 操作系统上,需要下载zip 文件。同样,
  • Linux 操作系统上,下载 Elasticsearch 设置的tar.gz 文件
  • Mac 操作系统上,下载 Elasticsearch 设置的tar.gz 文件
  • 对于基于 Ubuntu 或 Debian 的系统,下载 deb 包

33) Elasticsearch 可以与其他工具集成吗?如果可以,请列出这些工具的名称?

是的,Elasticsearch 可以与其他工具和技术集成。最流行的工具是 Logstash 和 Kibana,它们是 ELK stack 的组成部分。还有一些其他工具可以与 Elasticsearch 集成 -

  • Amazon Elasticsearch 服务
  • Couchbase
  • Contentful
  • Datadog

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 文件夹内。

配置步骤

  1. 导航到 elasticsearch/config 文件夹,然后在记事本中打开 elasticsearch.yml 文件。
  2. 将以下行复制并粘贴到文件末尾。
    path.repo: ["/my_backup_location"]
  3. 保存文件并重新启动 Elasticsearch 以查看效果。

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 以及您要恢复的快照名称。例如 -