

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

# 자습서: Amazon OpenSearch Service에서 문서 생성 및 검색
<a name="quick-start"></a>

이 자습서에서는 Amazon OpenSearch Service에서 문서를 생성하고 검색하는 방법을 알아봅니다. JSON 문서 형식으로 인덱스에 데이터를 추가합니다. OpenSearch Service는 사용자가 추가하는 첫 번째 문서 주위에 인덱스를 생성합니다.

이 자습서에서는 문서 생성을 위한 HTTP 요청, 문서 ID 자동 생성, 문서에 대한 기본 및 고급 검색 수행 방법을 설명합니다.

**참고**  
이 자습서에서는 개방 액세스가 가능한 도메인을 사용합니다. 최고 수준의 보안을 위해 도메인을 Virtual Private Cloud(VPC) 내부에 두는 것이 좋습니다.

## 사전 조건
<a name="quick-start-prereqs"></a>

이 자습서의 사전 요구 사항은 다음과 같습니다.
+ 가 있어야 합니다 AWS 계정.
+ 활성 OpenSearch Service 도메인이 있어야 합니다.

## 인덱스에 문서 추가
<a name="quick-start-create"></a>

인덱스에 문서를 추가하려면 [Postman](https://www.getpostman.com/), cURL 또는 OpenSearch Dashboards 콘솔과 같은 모든 HTTP 도구를 사용할 수 있습니다. 이 예제에서는 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를 생성하는 명령은 PUT 요청 대신 POST 요청을 사용하며 문서 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*
```

요청은 lettuce 문서를 포함하는 JSON 응답을 생성합니다.

**고급 검색**

요청 본문에 쿼리 옵션을 JSON으로 제공하여 고급 검색을 수행할 수 있습니다.

```
GET veggies/_search
{
  "query": {
    "term": {
      "name": "lettuce"
    }
  }
}
```

이 예제에서는 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)