

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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` field
<a name="operation-field"></a>

**참고**  
이는 요청 매핑 템플릿에만 적용됩니다.

 AWS AppSync가 OpenSearch Service 도메인으로 보내는 HTTP 메서드 또는 동사(GET, POST, PUT, HEAD 또는 DELETE)입니다. 키와 값은 둘 다 문자열이어야 합니다.

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

## `path` field
<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` field
<a name="params-field"></a>

**참고**  
이는 요청 매핑 템플릿에만 적용됩니다.

검색에서 수행할 작업을 지정하는 데 사용되며, 가장 일반적으로 **본문** 내에 **쿼리** 값을 설정하여 지정합니다. 그러나 응답 형식 지정 등과 같이 구성할 수 있는 기타 여러 가지 기능이 있습니다.
+  **headers** 

  키-값 페어로 표시되는 헤더 정보. 키와 값은 둘 다 문자열이어야 합니다. 예제:

  ```
  "headers" : {
      "Content-Type" : "application/json"
  }
  ```
**참고**  
AWS AppSync는 현재 JSON만 로 지원합니다`Content-Type`.
+  **queryString** 

  JSON 응답에 대한 코드 형식 지정 등과 같이 공통 옵션을 지정하는 키-값 페어. 키와 값은 둘 다 문자열이어야 합니다. 예를 들어, 형식이 잘 지정된 JSON을 가져오려면 다음을 사용합니다.

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

  이는 요청의 주요 부분으로, AWS AppSync가 OpenSearch Service 도메인에 대한 올바른 형식의 검색 요청을 생성할 수 있도록 허용합니다. 키는 객체로 구성된 문자열이어야 합니다. 아래에 몇 가지 경우가 나와 있습니다.

 **예제 1**.

‘시애틀’과 일치하는 도시가 포함된 모든 문서를 반환합니다.

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

 **예제 2**.

도시 또는 주가 ‘워싱턴’과 일치하는 모든 문서를 반환합니다.

```
"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)를 참조하십시오.