Elasticsearch 文档 API

2025年3月17日 | 阅读 8 分钟

正如我们在之前的教程中讨论的那样,Elasticsearch 是一个面向文档的数据库,它以文档的形式存储所有数据。 API 使用 JSON 文档格式来存储数据。 文档 API 是那些在文档级别执行操作的 API。 因此,如果您想在文档级别执行某些操作,则必须使用文档显示。 借助文档 API,您可以很好地做到这一点。

Elasticsearch 中,文档 API 分为两类,分别是 单个文档 API多文档 API。 我们将通过示例详细讨论每个 API -

1. 单个文档 API

如果您想对单个文档而不是一组文档执行操作,这些 API 很有用。 因此,当您想对单个文档执行操作时,可以使用这些单个文档 API。 单个文档 API 进一步分为四个 API,如下所示

首先,创建一个索引以使用所有这些 API。 使用以下命令 -

复制代码

此处 PUT 是请求方法,student 是索引名称。

响应

Elasticsearch Document APIs

索引 API

  • 当发出请求时,此 API 有助于在指定的索引中添加文档。
  • 如果文档已存在,它还允许我们更新文档。
  • 索引 API 用于完全替换现有文档。
  • 索引 API 允许我们添加和更新文档。
  • 我们必须使用 POST 方法来添加数据,我们需要指定文档 ID。

示例

使用以下代码将数据添加到索引中 -

复制代码

这里 POST 是请求方法,_doc 用于文档类型,以将数据添加到索引中。

响应

如果您在响应正文中获得以下输出,则请求正文中提供的数据已成功添加。

查看下面的浏览器屏幕截图 -

Elasticsearch Document APIs

获取 API

  • 获取 API 有助于检索或读取存储在索引中的数据。
  • 此 API 负责从索引中检索指定的 JSON 文档。

示例

在此示例中,我们将使用 GET API 来读取文档。 创建一个新请求并指定索引名称和文档 ID。 它将获取并在响应正文中显示结果。

索引名称 = student
文档 ID = 02

复制代码

选择 GET 方法并将剩余代码附加到请求字符串中。

响应

以下输出将显示在上述请求的响应正文中 -

查看下面的屏幕截图,了解它如何在浏览器上显示 -

Elasticsearch Document APIs

更新 API

更新 API 有助于更新现有文档,它使用脚本和版本控制。 它允许传递合并到现有文档中的部分文档。 在发出请求时使用 _update。

  • Script 关键字用于创建用于执行此操作的查询请求。 它可以修改、更新或删除文档。 您也可以使用 doc 代替 script 关键字来更新文档。
  • 版本控制用于确保在获取和重新索引期间没有发生更新。
  • 请记住,它只会更新单个文档,而不是全部。
  • 它接受两个参数,索引名称和文档 ID,即 <index> 和 <id>。

示例

Elasticsearch 提供 _update APIPOST 请求方法来更新文档。 在此示例中,我们将邮政编码从 10029 替换为 94003。

方法:POST
API:_update
索引名称:student
类型:_doc
要更新的数据:邮政编码

执行以下查询并更新文档。

复制代码

响应

如果您获得相同的输出,则文档已成功更新。

请参阅下面的屏幕截图,了解它在浏览器上的外观 -

Elasticsearch Document APIs

删除 API

  • 您可以使用此 API 删除特定的索引、文档或映射。
  • 向 Elasticsearch 发送 HTTP DELETE 请求以执行删除操作。
  • 它不需要大型语句来创建删除查询。
  • 使用 _delete API 并指定要删除的索引名称。

示例

我们将使用 DELETE API 来删除存储在索引中的文档。 因此,只需设置 DELETE 请求方法并提供要删除的索引名称和文档 ID。

复制代码

响应

如果您获得以下输出,则文档 02 已成功删除。

查看下面的屏幕截图以查看浏览器上的结果 -

Elasticsearch Document APIs

2. 多文档 API

与单个文档 API 不同,您可以使用多文档 API 跨多个文档进行查询。 例如 - 批量删除或更新数据,以及重新索引等。多文档 API 进一步分为五个 API,如下所示

多获取 API

  • 它使用索引的 _docs 数组检索多个文档。
  • 它提供与 Single Get API 类似的相同功能。 唯一的区别是此 API 返回多个文档。
  • 要提取文档,我们使用 doc 数组来指定所有这些文档的索引、类型和 ID。
  • 我们需要使用 POST API 从索引中检索多个文档。 这还不够,我们还需要在请求字符串中附加 _mget 并定义文档 ID 查询空间以获取多个记录。

请记住,必须在索引(数据库)中添加三个或四个以上的记录才能执行此操作。 请参阅以下示例 -

复制代码

在这里,我们获取 ID 为 01 和 03 的文档。

响应

您将获得类似以下响应的输出。

查看下面的屏幕截图以查看浏览器上的结果 -

Elasticsearch Document APIs

BulkAPI

Bulk API 有助于批量上传或删除 JSON 对象。 为此,在单个请求中进行多个索引/删除操作。 Bulk API 与 Get API 类似,并提供与它相同的所有其他功能。

  • 添加“_bulk”关键字以调用此 API。
  • 它用于批量执行删除/更新/索引操作。

以下是一些批量命令的示例

按查询删除 API

  • _delete_by_query 请求用于删除所有匹配的文档。
  • 当此请求处理时,Elasticsearch (ES) 执行多次搜索以查找要删除的所有文档。

示例

执行以下查询并更新索引。 这将删除所有城市 = 纽约的文档。

复制代码

响应

如果您获得相同的输出,则文档已成功删除。

请参阅下面的屏幕截图,以更好地了解请求和响应在浏览器上的外观 -

Elasticsearch Document APIs

如果我们使用 "script": {} 代替 field_name: value(即“city”: “New York”),它将删除学生索引中存在的所有文档。 请求查询将类似于 -

按查询更新 API

  • Update By Query API (_update_by_query) 对索引中存在的每个文档执行更新,而不更改源。
  • script 关键字用于创建用于执行此操作的查询请求。

示例

在此示例中,我们将所有城市为纽约的文档的邮政编码更新为 29001。

方法:POST
API:_update_by_query
索引名称:student
类型:_doc
要更新的数据:邮政编码

执行以下查询并更新文档。

复制代码

响应

如果您获得相同的输出,则文档已成功更新。

响应将与下面的屏幕截图相同 -

Elasticsearch Document APIs

在这里,您可以看到三个记录已更新,它们与给定的条件匹配。

重新索引 API

当我们需要在另一个索引中的文档时,基本上使用此 API。 我们使用 _reindex API 将文档数据从一个索引复制到另一个索引。 借助此 API,我们可以轻松地从一个索引复制文档,并创建其重复副本到另一个索引。 以下是有关重新索引 API 的一些要点

  • Reindex API 从源索引中提取文档,并将该文档索引到目标索引。
  • _source 必须为源索引中存在的所有文档启用。
  • 在调用 _reindex 之前,您必须首先设置目标索引。

示例

执行以下查询以将文档从一个索引重新索引到另一个索引。
方法:POST
API:_reindex
索引名称:student
新索引:new_student

复制代码

响应

如果您获得相同的输出,则文档已成功复制。

请参阅下面的屏幕截图,了解它在浏览器上的外观。

Elasticsearch Document APIs

因此,使用搜索 API,您可以看到所有文档已复制到新索引,即 new_student