

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

# OpenSearch 的 AWS AppSync 解析程式映射範本參考
<a name="resolver-mapping-template-reference-elasticsearch"></a>

**注意**  
我們現在主要支援 APPSYNC\$1JS 執行期及其文件。請考慮[在此處](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)使用 APPSYNC\$1JS 執行期及其指南。

Amazon OpenSearch Service 的 AWS AppSync 解析程式可讓您使用 GraphQL 在帳戶中現有的 OpenSearch Service 網域中存放和擷取資料。此解析程式的運作方式是允許您將傳入的 GraphQL 請求映射至 OpenSearch Service 請求，然後將 OpenSearch Service 回應映射回 GraphQL。本節說明支援 OpenSearch Service 操作的映射範本。

## 請求映射範本
<a name="request-mapping-template"></a>

大多數 OpenSearch Service 請求映射範本都有共同的結構，其中只有幾個部分變更。下列範例會根據 OpenSearch Service 網域執行搜尋，其中文件是以名為 的索引組織`post`。搜尋參數定義於 `body` 區段，許多常見的查詢子句定義於 `query` 欄位。此範例將搜尋在 `"Nadia"` 欄位中包含 `"Bailey"` 或 `author` (或兩者) 的文件：

```
{
    "version":"2017-02-28",
    "operation":"GET",
    "path":"/post/_search",
    "params":{
        "headers":{},
        "queryString":{},
        "body":{
            "from":0,
            "size":50,
            "query" : {
                "bool" : {
                    "should" : [
                        {"match" : { "author" : "Nadia" }},
                        {"match" : { "author" : "Bailey" }}
                    ]
                }
            }
        }
    }
}
```

## 回應映射範本
<a name="response-mapping-template"></a>

如同其他資料來源，OpenSearch Service 會將回應傳送至需要轉換為 GraphQL 的 AWS AppSync。

大多數 GraphQL 查詢正在從 OpenSearch Service 回應中尋找 `_source` 欄位。由於您可以執行搜尋以傳回個別文件或文件清單，因此 OpenSearch Service 中有兩種常用的回應映射範本：

 **結果清單** 

```
[
    #foreach($entry in $context.result.hits.hits)
      #if( $velocityCount > 1 ) , #end
        $utils.toJson($entry.get("_source"))
    #end
]
```

 **個別項目** 

```
$utils.toJson($context.result.get("_source"))
```

## `operation` 欄位
<a name="operation-field"></a>

**注意**  
這僅適用於請求映射範本。

 AWS AppSync 傳送至 OpenSearch Service 網域的 HTTP 方法或動詞 (GET、POST、PUT、HEAD 或 DELETE)。金鑰與值皆必須為字串。

```
"operation" : "PUT"
```

## `path` 欄位
<a name="path-field"></a>

**注意**  
這僅適用於請求映射範本。

來自 AWS AppSync 的 OpenSearch Service 請求的搜尋路徑。這會形成操作的 HTTP 動詞的 URL。金鑰與值皆必須為字串。

```
"path" : "/<indexname>/_doc/<_id>"
"path" : "/<indexname>/_doc"
"path" : "/<indexname>/_search"
"path" : "/<indexname>/_update/<_id>
```

評估映射範本時，此路徑會做為 HTTP 請求的一部分傳送，包括 OpenSearch Service 網域。例如，之前的範例可轉譯為：

```
GET https://opensearch-domain-name.REGION.es.amazonaws.com/indexname/type/_search
```

## `params` 欄位
<a name="params-field"></a>

**注意**  
這僅適用於請求映射範本。

用來指定搜尋執行的動作，最常見的方式是設定**內文**內的**查詢**值。不過，有多項其他功能可設定，例如回應的格式。
+  **標頭** 

  標頭資訊，以金鑰值對形式。金鑰與值皆必須為字串。例如：

  ```
  "headers" : {
      "Content-Type" : "application/json"
  }
  ```
**注意**  
AWS AppSync 目前僅支援 JSON 做為 `Content-Type`。
+  **queryString** 

  金鑰值對，指定常見的選項，例如 JSON 回應的程式碼格式。金鑰與值皆必須為字串。例如，如果您希望獲得非常完整格式的 JSON，請使用：

  ```
  "queryString" : {
      "pretty" : "true"
  }
  ```
+  **本文** 

  這是請求的主要部分，允許 AWS AppSync 為您的 OpenSearch Service 網域製作格式正確的搜尋請求。金鑰必須是由物件組成的字串。以下顯示幾個示範。

 **範例 1** 

傳回城市符合「seattle」的所有文件：

```
"body":{
    "from":0,
    "size":50,
    "query" : {
        "match" : {
            "city" : "seattle"
        }
    }
}
```

 **範例 2** 

傳回所有符合「washington」做為城市或州的文件：

```
"body":{
    "from":0,
    "size":50,
    "query" : {
        "multi_match" : {
            "query" : "washington",
            "fields" : ["city", "state"]
        }
    }
}
```

## 傳遞變數
<a name="passing-variables"></a>

**注意**  
這僅適用於請求映射範本。

您也可以將變數做為 VTL 陳述式中評估的一部分進行傳遞。例如，假設您有一個 GraphQL 查詢如下：

```
query {
    searchForState(state: "washington"){
        ...
    }
}
```

此映射範本可採取狀態做為引數：

```
"body":{
    "from":0,
    "size":50,
    "query" : {
        "multi_match" : {
            "query" : "$context.arguments.state",
            "fields" : ["city", "state"]
        }
    }
}
```

如需您可包含在 VTL 中的公用程式清單，請參閱[存取請求標頭](resolver-context-reference.md#aws-appsync-resolver-context-reference-util)。