教程:在 Amazon OpenSearch Service 中创建和搜索文档 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:在 Amazon OpenSearch Service 中创建和搜索文档

在本教程中,您将了解如何在 Amazon OpenSearch Service 中创建和搜索文档。您将以 JSON 文档的形式将数据添加到索引。OpenSearch Service 会围绕您添加的第一个文档创建索引。

本教程介绍如何发出 HTTP 请求以创建文档、自动生成文档 ID 以及如何对文档执行基本搜索和高级搜索。

注意

本教程使用具有开放访问权限的域。为了获得最高级别的安全性,我们建议您将域置于虚拟私有云(VPC)内。

先决条件

本教程包含以下先决条件:

  • 您必须具有 Amazon Web Services 账户。

  • 您必须具有一个活动的 OpenSearch Service 域。

将文档添加到索引

要将文档添加到索引,您可以使用任何 HTTP 工具,例如 Postman、cURL 或 OpenSearch 控制面板控制台。这些示例假定您使用 OpenSearch 控制面板中的开发人员控制台。如果您使用其他工具,请提供完整的 URL 和凭证(如有必要)进行相应调整。

将文档添加到索引

  1. 导航到域的 OpenSearch 控制面板 URL。您可以在 OpenSearch Service 控制台中找到域的控制面板 URL。URL 遵循以下格式:

    domain-endpoint/_dashboards/
  2. 使用您的主用户名和密码登录。

  3. 打开左侧导航面板,然后选择 Dev Tools(开发人员工具)。

  4. 用于创建新资源的 HTTP 动词是 PUT,您将使用它创建新文档和索引。在控制台中,输入以下命令:

    PUT fruit/_doc/1 { "name":"strawberry", "color":"red" }

    PUT 请求创建一个名为 fruit(水果)的索引,并使用 ID 1 将单个文档添加到索引。它将生成以下响应:

    { "_index" : "fruit", "_type" : "_doc", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }

创建自动生成的 ID

OpenSearch Service 可以自动为您的文档生成一个 ID。生成 ID 的命令使用 POST 请求而非 PUT 请求,并且不需要文档 ID(与之前的请求相比)。

在开发人员控制台中,输入以下请求:

POST veggies/_doc { "name":"beet", "color":"red", "classification":"root" }

此请求将创建一个名为 veggies(蔬菜)的索引,并将文档添加到索引。它将生成以下响应:

{ "_index" : "veggies", "_type" : "_doc", "_id" : "3WgyS4IB5DLqbRIvLxtF", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }

请注意,响应中的其他 _id 字段表示自动创建的 ID。

注意

您无需在 URL 中 _doc 之后提供任何内容,ID 通常位于该位置。因为您使用生成的 ID 创建文档,所以您无需提供 ID。这是为更新预留的。

使用 POST 命令更新文档

要更新文档,您可以通过 ID 号码使用 HTTP POST 命令。

首先,创建 ID 为 42 的文档:

POST fruits/_doc/42 { "name":"banana", "color":"yellow" }

然后,使用该 ID 更新文档:

POST fruits/_doc/42 { "name":"banana", "color":"yellow", "classification":"berries" }

此命令使用新字段 classification 更新文档。它将生成以下响应:

{ "_index" : "fruits", "_type" : "_doc", "_id" : "42", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }
注意

如果您尝试更新不存在的文档,OpenSearch Service 会创建文档。

执行批量操作

您可以在一个请求中使用 POST _bulk API 操作对一个或多个索引执行多个操作。批量操作命令采用以下形式:

POST /_bulk <action_meta>\n <action_data>\n <action_meta>\n <action_data>\n

每个操作都需要两行 JSON。首先,您需要提供操作描述或元数据。在下一行中,您需要提供数据。每个部分使用换行符(\n)分隔。插入的操作描述可能如下所示:

{ "create" : { "_index" : "veggies", "_type" : "_doc", "_id" : "7" } }

包含数据的下一行可能如下所示:

{ "name":"kale", "color":"green", "classification":"leafy-green" }

总的来说,元数据和数据表示批量操作中的单个操作。您可以在一个请求中执行许多操作,如下所示:

POST /_bulk { "create" : { "_index" : "veggies", "_id" : "35" } } { "name":"kale", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "36" } } { "name":"spinach", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "37" } } { "name":"arugula", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "38" } } { "name":"endive", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "39" } } { "name":"lettuce", "color":"green", "classification":"leafy-green" } { "delete" : { "_index" : "vegetables", "_id" : "1" } }

请注意,最后一个操作是 deletedelete 操作之后将没有数据。

现在,您的集群中已存在数据,您可以搜索这些数据。例如,您可能想要搜索所有根茎类蔬菜,或获取所有绿叶蔬菜的数量,亦或是查找每小时记录的错误数量。

基本搜索

基本搜索如下所示:

GET veggies/_search?q=name:l*

此请求生成包含生菜文档的 JSON 响应。

高级搜索

您可以在请求正文中以 JSON 形式提供查询选项,从而执行更高级的搜索:

GET veggies/_search { "query": { "term": { "name": "lettuce" } } }

此示例还使用生菜文档生成 JSON 响应。

排序

您可以使用排序执行更多此类查询。首先,您需要重新创建索引,因为自动字段映射默认选择无法排序的类型。发送以下请求以删除和重新创建索引:

DELETE /veggies PUT /veggies { "mappings":{ "properties":{ "name":{ "type":"keyword" }, "color":{ "type":"keyword" }, "classification":{ "type":"keyword" } } } }

然后,使用数据重新填充索引:

POST /_bulk { "create" : { "_index" : "veggies", "_id" : "7" } } { "name":"kale", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "8" } } { "name":"spinach", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "9" } } { "name":"arugula", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "10" } } { "name":"endive", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "11" } } { "name":"lettuce", "color":"green", "classification":"leafy-green" }

现在,您可以使用排序进行搜索。此请求按分类添加升序排序:

GET veggies/_search { "query" : { "term": { "color": "green" } }, "sort" : [ "classification" ] }

相关的 资源

有关更多信息,请参阅以下资源: