教程:在亞馬遜 OpenSearch 服務中創建和搜索文檔 - Amazon OpenSearch Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教程:在亞馬遜 OpenSearch 服務中創建和搜索文檔

在本教學中,您將學習如何在 Amazon OpenSearch 服務中建立和搜尋文件。您可以以 JSON 文件的形式將資料新增至索引。 OpenSearch 服務會圍繞您新增的第一個文件建立索引。

本教學課程說明如何發出 HTTP 請求以建立文件、自動產生文件 ID,以及如何對文件執行基本搜尋和進階搜尋。

注意

本教程課程使用具有開放存取權的網域。為了實現最高等級的安全性,我們建議您將網域放入虛擬私有雲端 (VPC) 內。

先決條件

本教學課程具備下列先決條件:

  • 您必須具有 AWS 帳戶。

  • 您必須擁有作用中的 OpenSearch 服務網域。

將文件新增至索引

若要將文件新增至索引,您可以使用任何 HTTP 工具,例如郵遞員、cURL 或 OpenSearch 儀表板主控台。這些範例假設您正在使用 OpenSearch 儀表板中的開發人員主控台。如果您使用其他工具,請視需要提供完整的 URL 和憑證進行相應調整。

若要將文件新增至索引

  1. 導覽至您網域的 OpenSearch 儀表板 URL。您可以在 OpenSearch 服務主控台的網域儀表板上找到 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 服務可以自動為您的文檔生成 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" ] }

相關資源

如需詳細資訊,請參閱下列資源: