

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

# OpenSearch용AWS AppSync JavaScript 해석기 함수 참조
<a name="resolver-reference-elasticsearch-js"></a>

Amazon OpenSearch Service용 AWS AppSync 해석기를 사용하면 GraphQL을 사용하여 계정의 기존 OpenSearch Service 도메인에 데이터를 저장하고 검색할 수 있습니다. 이 해석기는 수신되는 GraphQL 요청을 OpenSearch Service 요청으로 매핑한 다음 OpenSearch Service 응답을 다시 GraphQL로 매핑하도록 하여 작동합니다. 이 섹션에서는 지원되는 OpenSearch Service 작업에 대한 요청 및 응답 핸들러를 설명합니다.

## 요청
<a name="request-js"></a>

대부분의 OpenSearch Service 요청 객체에는 몇 부분만 변경되는 공통 구조가 있습니다. 다음 예제는 문서가 `post` 유형이고 `id`에서 인덱싱되는 OpenSearch Service 도메인에 대해 검색을 실행합니다. 검색 파라미터는 `body` 섹션에 정의되어 있고, 공통 쿼리 절은 대부분 `query` 필드에서 정의합니다. 이 예에서는 문서의 `"Nadia"` 필드에서 `"Bailey"`, `author` 또는 둘 다가 포함된 문서를 검색합니다.

```
export function request(ctx) {
  return {
    operation: 'GET',
    path: '/id/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에서는 두 가지 공통 응답 패턴이 사용됩니다.

 **결과 목록** 

```
export function response(ctx) {
  const entries = [];
  for (const entry of ctx.result.hits.hits) {
    entries.push(entry['_source']);
  }
  return entries;
}
```

 **개별 항목** 

```
export function response(ctx) {
  return ctx.result['_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/type"

"path" : "/indexname/type/_search"
```

요청 핸들러가 평가되면 이 경로는 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**.

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

```
export function request(ctx) {
  return {
    operation: 'GET',
    path: '/id/post/_search',
    params: {
      headers: {},
      queryString: {},
      body: { from: 0, size: 50, query: { match: { city: 'seattle' } } },
    },
  };
}
```

 **예제 2**.

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

```
export function request(ctx) {
  return {
    operation: 'GET',
    path: '/id/post/_search',
    params: {
      headers: {},
      queryString: {},
      body: {
        from: 0,
        size: 50,
        query: {
          multi_match: { query: 'washington', fields: ['city', 'state'] },
        },
      },
    },
  };
}
```

## 변수 전달
<a name="passing-variables"></a>

**참고**  
이는 요청 핸들러에만 적용됩니다.

요청 핸들러에서 평가의 일부로 변수를 전달할 수도 있습니다. 예를 들어, 다음과 같은 GraphQL 쿼리가 있다고 가정해 보겠습니다.

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

함수 요청 핸들러는 다음과 같을 수 있습니다.

```
export function request(ctx) {
  return {
    operation: 'GET',
    path: '/id/post/_search',
    params: {
      headers: {},
      queryString: {},
      body: {
        from: 0,
        size: 50,
        query: {
          multi_match: { query: ctx.args.state, fields: ['city', 'state'] },
        },
      },
    },
  };
}
```