本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:在 Amazon OpenSearch Service 中创建和搜索文档
在本教程中,您将了解如何在 Amazon OpenSearch Service 中创建和搜索文档。您将以 JSON 文档的形式将数据添加到索引。OpenSearch Service 会围绕您添加的第一个文档创建索引。
本教程介绍如何发出 HTTP 请求以创建文档、自动生成文档 ID 以及如何对文档执行基本搜索和高级搜索。
注意
本教程使用具有开放访问权限的域。为了获得最高级别的安全性,我们建议您将域置于虚拟私有云(VPC)内。
先决条件
本教程包含以下先决条件:
-
您必须具有 AWS 账户。
-
您必须具有一个活动的 OpenSearch Service 域。
将文档添加到索引
要将文档添加到索引,您可以使用任何 HTTP 工具,例如 Postman
将文档添加到索引
-
导航到域的 OpenSearch 控制面板 URL。您可以在 OpenSearch Service 控制台中找到域的控制面板 URL。URL 遵循以下格式:
domain-endpoint
/_dashboards/ -
使用您的主用户名和密码登录。
-
打开左侧导航面板,然后选择 Dev Tools(开发人员工具)。
-
用于创建新资源的 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" } }
请注意,最后一个操作是 delete
。delete
操作之后将没有数据。
搜索文档
现在,您的集群中已存在数据,您可以搜索这些数据。例如,您可能想要搜索所有根茎类蔬菜,或获取所有绿叶蔬菜的数量,亦或是查找每小时记录的错误数量。
基本搜索
基本搜索如下所示:
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" ] }
相关资源
有关更多信息,请参阅以下资源: