

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

# 벡터 검색 컬렉션 작업
<a name="serverless-vector-search"></a>

OpenSearch Serverless의 *벡터 검색* 컬렉션 유형은 확장 가능하고 성능이 우수한 유사성 검색 기능을 제공합니다. 이를 통해 기본 벡터 데이터베이스 인프라를 관리할 필요 없이 최신 기계 학습(ML) 증강 검색 경험과 생성형 AI애플리케이션을 쉽게 구축할 수 있습니다.

벡터 검색 컬렉션의 사용 사례에는 이미지 검색, 문서 검색, 음악 검색, 제품 추천, 동영상 검색, 위치 기반 검색, 사기 탐지, 이상 탐지 등이 있습니다.

OpenSearch Serverless의 벡터 엔진은 OpenSearch의 [k-NN(k-최근접이웃) 검색 기능](https://opensearch.org/docs/latest/search-plugins/knn/index/)으로 구동되므로 서버리스 환경의 단순함과 함께 동일한 기능을 사용할 수 있습니다. 이 엔진은 [k-NN 플러그인 API](https://opensearch.org/docs/latest/search-plugins/knn/api/)를 지원합니다. 이러한 작업을 통해 전체 텍스트 검색, 고급 필터링, 집계, 지리공간 쿼리, 데이터 검색 속도를 높이기 위한 중첩 쿼리, 향상된 검색 결과를 활용할 수 있습니다.

벡터 엔진은 유클리드 거리, 코사인 유사성, 점 곱 유사성과 같은 거리 측정법을 제공하며 16,000개의 차원을 수용할 수 있습니다. 숫자, 부울, 날짜, 키워드, 지오포인트 등 다양한 메타데이터 유형의 필드를 메타데이터에 저장할 수 있습니다. 설명 정보를 위한 텍스트와 함께 필드를 저장하여 저장된 벡터에 더 많은 컨텍스트를 추가할 수도 있습니다. 데이터 유형을 콜로케이션하면 복잡성이 줄어들고 유지 관리성이 향상되며 데이터 중복, 버전 호환성 문제 및 라이선스 문제를 피할 수 있습니다.

**참고**  
다음과 같은 정보를 참고합니다.  
Amazon OpenSearch Serverless는 32비트 부동 벡터와 16비트 벡터 간의 변환을 수행하는 데 사용 가능한 Faiss 16비트 스칼라 양자화를 지원합니다. 자세한 내용은 [Faiss 16비트 스칼라 양자화](https://opensearch.org/docs/latest/search-plugins/knn/knn-vector-quantization/#faiss-16-bit-scalar-quantization)를 참조하세요. 이진 벡터를 사용하여 메모리 비용을 줄일 수도 있습니다. 자세한 내용은 [이진 벡터](https://opensearch.org/docs/latest/field-types/supported-field-types/knn-vector#binary-vectors)를 참조하세요.
Amazon OpenSearch Serverless는 디스크 기반 벡터 검색을 지원합니다. 디스크 기반 벡터 검색은 메모리가 적은 환경에서 벡터 워크로드의 운영 비용을 크게 줄여 줍니다. 자세한 내용은 [디스크 기반 벡터 검색](https://docs.opensearch.org/2.19/vector-search/optimizing-storage/disk-based-vector-search/)을 참조하세요.

## 벡터 검색 컬렉션 시작
<a name="serverless-vector-tutorial"></a>

이 자습서에서는 벡터 임베딩을 실시간으로 저장, 검색 및 불러오는 다음 단계를 완료합니다.

1. [권한 구성](#serverless-vector-permissions)

1. [컬렉션 생성](#serverless-vector-create)

1. [데이터 업로드 및 검색](#serverless-vector-index)

1. [컬렉션 삭제](#serverless-vector-delete)

### 1단계: 권한 구성
<a name="serverless-vector-permissions"></a>

이 자습서를 완료하려면(일반적으로 OpenSearch Serverless를 사용하려면) 올바른 AWS Identity and Access Management (IAM) 권한이 있어야 합니다. 이 자습서에서는 컬렉션을 생성하고 데이터를 업로드하고 검색한 다음 컬렉션을 삭제합니다.

사용자 또는 역할에는 다음과 같은 최소 권한이 포함된 연결된 [자격 증명 기반 정책](security-iam-serverless.md#security-iam-serverless-id-based-policies)이 있어야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "aoss:CreateCollection",
        "aoss:ListCollections",
        "aoss:BatchGetCollection",
        "aoss:DeleteCollection",
        "aoss:CreateAccessPolicy",
        "aoss:ListAccessPolicies",
        "aoss:UpdateAccessPolicy",
        "aoss:CreateSecurityPolicy",
        "iam:ListUsers",
        "iam:ListRoles"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

OpenSearch Serverless IAM 권한에 대한 자세한 내용은 [Amazon OpenSearch Serverless에 대한 Identity and Access Management](security-iam-serverless.md) 섹션을 참조하세요.

### 2단계: 컬렉션 생성
<a name="serverless-vector-create"></a>

*컬렉션*은 특정 워크로드 또는 사용 사례를 지원하기 위해 함께 작동하는 OpenSearch 인덱스 그룹입니다.

**OpenSearch Serverless 컬렉션 생성하기**

1. [https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home ) Amazon OpenSearch Service 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **Collections**(컬렉션)를 선택하고 **Create collection**(컬렉션 생성)을 선택합니다.

1. 컬렉션 **하우징**의 이름을 지정하세요.

1. 컬렉션 유형에서 **벡터 검색**을 선택합니다. 자세한 내용은 [컬렉션 유형 선택](serverless-overview.md#serverless-usecase) 단원을 참조하십시오.

1. **배포 유형**에서 **이중화 활성화(활성 복제본)** 선택을 취소합니다. 이렇게 하면 개발 또는 테스트 모드에서 컬렉션이 생성되고 컬렉션의 OpenSearch 컴퓨팅 유닛(OCU) 수가 2개로 줄어듭니다. 이 자습서에서 프로덕션 환경을 생성하려면 이 확인란을 선택된 상태로 둡니다.

1. **보안**에서 **간편 생성**을 선택하여 보안 구성을 간소화합니다. 벡터 엔진의 모든 데이터는 기본적으로 전송 및 저장 중에 암호화됩니다. 벡터 엔진은 세분화된 IAM 권한을 지원하므로 암호화, 네트워크, 컬렉션 및 인덱스를 생성, 업데이트 및 삭제할 수 있는 사용자를 정의할 수 있습니다.

1. **다음**을 선택합니다.

1. 컬렉션 설정을 검토하고 **Submit**(제출)을 선택합니다. 컬렉션이 `Active` 상태가 될 때까지 몇 분 정도 기다립니다.

### 3단계: 데이터 업로드 및 검색
<a name="serverless-vector-index"></a>

*인덱스*는 벡터 임베딩 및 기타 필드를 저장, 검색 및 불러올 수 있는 방법을 제공하는 공통 데이터 스키마를 포함하는 문서 컬렉션입니다. [Postman](https://www.postman.com/downloads/) 또는 [awscurl](https://github.com/okigan/awscurl)과 같은 HTTP 도구를 사용하거나 OpenSearch 대시보드의 [Dev Tools](https://opensearch.org/docs/latest/dashboards/dev-tools/index-dev/) 콘솔을 사용하여 OpenSearch Serverless 컬렉션에서 데이터를 생성하고 인덱스로 업로드할 수 있습니다. 이 자습서에서는 Dev Tools를 사용합니다.

**주택 컬렉션에서 데이터를 인덱싱하고 검색하려면**

1. 새 컬렉션에 대해 단일 인덱스를 생성하려면 [Dev Tools](https://opensearch.org/docs/latest/dashboards/dev-tools/index-dev/) 콘솔에서 다음 요청을 전송합니다. 기본적으로 이렇게 하면 `nmslib` 엔진과 유클리드 거리가 포함된 인덱스가 생성됩니다.

   ```
   PUT housing-index
   {
      "settings": {
         "index.knn": true
      },
      "mappings": {
         "properties": {
            "housing-vector": {
               "type": "knn_vector",
               "dimension": 3
            },
            "title": {
               "type": "text"
            },
            "price": {
               "type": "long"
            },
            "location": {
               "type": "geo_point"
            }
         }
      }
   }
   ```

1. 단일 문서를 *housing-index*로 인덱싱하려면 다음 요청을 보냅니다.

   ```
   POST housing-index/_doc
   {
     "housing-vector": [
       10,
       20,
       30
     ],
     "title": "2 bedroom in downtown Seattle",
     "price": "2800",
     "location": "47.71, 122.00"
   }
   ```

1. 인덱스에 있는 속성과 유사한 속성을 검색하려면 다음 쿼리를 보내세요.

   ```
   GET housing-index/_search
   {
       "size": 5,
       "query": {
           "knn": {
               "housing-vector": {
                   "vector": [
                       10,
                       20,
                       30
                   ],
                   "k": 5
               }
           }
       }
   }
   ```

### 4단계: 컬렉션 삭제
<a name="serverless-vector-delete"></a>

*주택* 컬렉션은 테스트용이므로 실험을 마치면 삭제해야 합니다.

**OpenSearch Serverless 컬렉션 삭제하기**

1. **Amazon OpenSearch Service** 콘솔로 돌아갑니다.

1. 왼쪽 탐색 창에서 **컬렉션**를 선택하고 **속성** 컬렉션을 선택합니다.

1. **삭제**를 선택하여 삭제를 확인합니다.

## 필터링된 검색
<a name="serverless-vector-filter"></a>

필터를 사용하여 의미 체계 검색 결과를 구체화할 수 있습니다. 인덱스를 만들고 문서에서 필터링된 검색을 수행하려면 이전 자습서의 [데이터 업로드 및 검색](#serverless-vector-index)을 다음 지침으로 대체하세요. 다른 단계는 동일하게 유지됩니다. 필터에 대한 자세한 내용은 [필터를 사용한 k-NN 검색](https://opensearch.org/docs/latest/search-plugins/knn/filter-search-knn/)을 참조하세요.

**주택 컬렉션에서 데이터를 인덱싱하고 검색하려면**

1. 컬렉션에 대해 단일 인덱스를 생성하려면 [Dev Tools](https://opensearch.org/docs/latest/dashboards/dev-tools/index-dev/) 콘솔에서 다음 요청을 전송합니다.

   ```
   PUT housing-index-filtered
   {
     "settings": {
       "index.knn": true
     },
     "mappings": {
       "properties": {
         "housing-vector": {
           "type": "knn_vector",
           "dimension": 3,
           "method": {
             "engine": "faiss",
             "name": "hnsw"
           }
         },
         "title": {
           "type": "text"
         },
         "price": {
           "type": "long"
         },
         "location": {
           "type": "geo_point"
         }
       }
     }
   }
   ```

1. 단일 문서를 *housing-index-filtered*로 인덱싱하려면 다음 요청을 보냅니다.

   ```
   POST housing-index-filtered/_doc
   {
     "housing-vector": [
       10,
       20,
       30
     ],
     "title": "2 bedroom in downtown Seattle",
     "price": "2800",
     "location": "47.71, 122.00"
   }
   ```

1. 지정된 가격으로 지리적 지점으로부터 일정 거리 내에 있는 시애틀 아파트 데이터를 검색하려면 다음 요청을 보내세요.

   ```
   GET housing-index-filtered/_search
   {
     "size": 5,
     "query": {
       "knn": {
         "housing-vector": {
           "vector": [
             0.1,
             0.2,
             0.3
           ],
           "k": 5,
           "filter": {
             "bool": {
               "must": [
                 {
                   "query_string": {
                     "query": "Find me 2 bedroom apartment in Seattle under $3000 ",
                     "fields": [
                       "title"
                     ]
                   }
                 },
                 {
                   "range": {
                     "price": {
                       "lte": 3000
                     }
                   }
                 },
                 {
                   "geo_distance": {
                     "distance": "100miles",
                     "location": {
                       "lat": 48,
                       "lon": 121
                     }
                   }
                 }
               ]
             }
           }
         }
       }
     }
   }
   ```

## 십억 개 규모의 워크로드
<a name="serverless-vector-billion"></a>

벡터 검색 컬렉션은 수십억 개 벡터로 구성된 워크로드를 지원합니다. Auto Scaling이 자동으로 작업을 수행하므로 크기 조정 목적으로 다시 인덱싱할 필요가 없습니다. 차원 수가 많은 벡터가 수백만 개(또는 그 이상) 있고 200개 이상의 OCU가 필요한 경우 [AWS Support](https://aws.amazon.com/premiumsupport/)에 문의하여 계정의 최대 OpenSearch 컴퓨팅 유닛(OCU) 수를 늘리십시오.

## 제한 사항
<a name="serverless-vector-limitations"></a>

벡터 검색 컬렉션에는 다음과 같은 제한 사항이 있습니다.
+ 벡터 검색 컬렉션은 Apache Lucene ANN 엔진을 지원하지 않습니다.
+ 벡터 검색 컬렉션은 Faiss의 HNSW 알고리즘만 지원하고 IVF 및 IVFQ는 지원하지 않습니다.
+ 벡터 검색 컬렉션은 워밍업, 통계 및 모델 학습 API 작업을 지원하지 않습니다.
+ 벡터 검색 컬렉션은 인라인 또는 저장된 스크립트를 지원하지 않습니다.
+ 벡터 검색 컬렉션에 AWS Management Console 대한 인덱스 수 정보는에서 사용할 수 없습니다.
+ 벡터 검색 컬렉션의 인덱스 새로 고침 간격은 60초입니다.

## 다음 단계
<a name="serverless-vector-next"></a>

벡터 검색 컬렉션과 인덱스 데이터를 생성하는 방법을 알았으므로 다음 연습을 시도해볼 수 있습니다.
+ OpenSearch Python 클라이언트를 사용하여 벡터 검색 컬렉션을 사용하세요. [GitHub](https://github.com/opensearch-project/opensearch-py/blob/main/guides/plugins/knn.md)에서 이 튜토리얼을 참조하세요.
+ OpenSearch Java 클라이언트를 사용하여 벡터 검색 컬렉션을 사용하세요. [GitHub](https://github.com/opensearch-project/opensearch-java/blob/main/guides/plugins/knn.md)에서 이 튜토리얼을 참조하세요.
+ OpenSearch를 벡터 저장소로 사용하도록 LangChain을 설정하세요. LangChain은 언어 모델을 기반으로 애플리케이션을 개발할 수 있는 오픈 소스 프레임워크입니다. 자세한 내용은 [LangChain 설명서](https://python.langchain.com/docs/integrations/vectorstores/opensearch)를 참조하세요.