本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教程:在亞馬遜 OpenSearch 服務中創建和搜索文檔
在本教學中,您將學習如何在 Amazon OpenSearch 服務中建立和搜尋文件。您可以以 JSON 文件的形式將資料新增至索引。 OpenSearch 服務會圍繞您新增的第一個文件建立索引。
本教學課程說明如何發出 HTTP 請求以建立文件、自動產生文件 ID,以及如何對文件執行基本搜尋和進階搜尋。
注意
本教程課程使用具有開放存取權的網域。為了實現最高等級的安全性,我們建議您將網域放入虛擬私有雲端 (VPC) 內。
先決條件
本教學課程具備下列先決條件:
-
您必須具有 AWS 帳戶。
-
您必須擁有作用中的 OpenSearch 服務網域。
將文件新增至索引
若要將文件新增至索引,您可以使用任何 HTTP 工具,例如郵遞員
若要將文件新增至索引
-
導覽至您網域的 OpenSearch 儀表板 URL。您可以在 OpenSearch 服務主控台的網域儀表板上找到 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 服務可以自動為您的文檔生成 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" ] }
相關資源
如需詳細資訊,請參閱下列資源: