

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# OpenSearch の AWS AppSync リゾルバーマッピングテンプレートリファレンス OpenSearch
<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 で使用される、2 つの共通レスポンスマッピングテンプレートがあります。

 **結果のリスト** 

```
[
    #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>
```

マッピングテンプレートが評価されると、このパスは、OpenSearch Service ドメインが含まれる HTTP リクエストの一部として送信されます。たとえば、前の例では次のように変換される可能性があります。

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

## `params` フィールド
<a name="params-field"></a>

**注記**  
これは、リクエストマッピングテンプレートにのみ適用されます。

検索実行時のアクションを指定するために使用され、一般に、**query** 値を **body** 内に設定します。ただし、レスポンスのフォーマットなど、他のいくつかの機能を設定できます。
+  **ヘッダ** 

  ヘッダー情報は、キーと値のペアです。キーと値の両方が文字列である必要があります。例えば、次のようになります。

  ```
  "headers" : {
      "Content-Type" : "application/json"
  }
  ```
**注記**  
AWS AppSync は現在、 として JSON のみをサポートしています`Content-Type`。
+  **queryString** 

  一般的なオプション (JSON レスポンスのコードフォーマットなど) を指定するキーと値のペア。キーと値の両方が文字列である必要があります。たとえば、整形表示の JSON を取得する場合は、次を使用します。

  ```
  "queryString" : {
      "pretty" : "true"
  }
  ```
+  **body** 

  これはリクエストの主要部分であり、 AWS AppSync が OpenSearch Service ドメインに対して適切な形式の検索リクエストを作成できるようにします。キーはオブジェクトで構成される文字列である必要があります。2 つのデモを以下に示します。

 **例 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"){
        ...
    }
}
```

マッピングテンプレートは引数として state をとることができます。

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

VTL に含めることができるユーティリティのリストについては、「[Access Request Headers](resolver-context-reference.md#aws-appsync-resolver-context-reference-util)」を参照してください。