

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

# 教學課程：在 Amazon OpenSearch Service 中建立和搜尋文件
<a name="quick-start"></a>

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

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

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

## 先決條件
<a name="quick-start-prereqs"></a>

本教學課程具備下列先決條件：
+ 您必須擁有 AWS 帳戶。
+ 您必須擁有作用中的 OpenSearch Service 網域。

## 將文件新增至索引
<a name="quick-start-create"></a>

若要將文件新增至索引，您可以使用任何 HTTP 工具，例如 [Postman](https://www.getpostman.com/)、cURL 或 OpenSearch Dashboards 主控台。這些範例假設您正在使用 OpenSearch Dashboards 中的開發人員主控台。如果您使用其他工具，請視需要提供完整的 URL 和憑證進行相應調整。

**若要將文件新增至索引**

1. 導覽至您網域的 OpenSearch Dashboards URL。您可以在 OpenSearch Service 主控台網域的儀表板上找到 URL。URL 遵循以下格式：

   ```
   domain-endpoint/_dashboards/
   ```

1. 使用您的主要使用者名稱和密碼登入。

1. 開啟左側導覽面板並選擇 **Dev Tools** (開發工具)。

1. 用於建立新資源的 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
<a name="quick-start-id"></a>

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 命令更新文件
<a name="quick-start-update"></a>

若要更新文件，請使用帶有 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 會建立該文件。

## 執行大量動作
<a name="quick-start-bulk"></a>

您可以使用 `POST _bulk` API 操作對一個請求中的一個或多個索引執行多個動作。大量動作命令採用下列格式：

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

每個動作需要兩行 JSON。首先，您要提供動作說明或中繼資料。在下一行中提供該資料。每部分由換行符號 (\$1n) 分隔。插入的動作描述可能如下所示：

```
{ "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` 動作之後沒有資料。

## 搜尋文件
<a name="quick-start-search"></a>

現在您的叢集中存在資料，您可以搜尋它。例如，您可能想要搜尋所有根莖類蔬菜，或取得所有綠葉蔬菜的計數，或者尋找每小時記錄的錯誤數量。

**基本搜尋**

基本搜尋如下所示：

```
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"
  ]
}
```

## 相關資源
<a name="quick-start-resources"></a>

如需詳細資訊，請參閱下列資源：
+ [Amazon OpenSearch Service 入門](gsg.md)
+ [在 Amazon OpenSearch Service 中建立資料索引](indexing.md)
+ [在 Amazon OpenSearch Service 中搜尋資料](searching.md)