기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
벡터 검색 컬렉션 작업
OpenSearch Serverless의 벡터 검색 컬렉션 유형을 사용하면 확장 가능하고 성능이 뛰어난 유사성 검색을 수행할 수 있습니다. 기본 벡터 데이터베이스 인프라를 관리하지 않고도 최신 기계 학습(ML) 증강 검색 경험과 생성형 인공 지능(AI) 애플리케이션을 구축할 수 있습니다.
벡터 검색 컬렉션의 사용 사례에는 이미지 검색, 문서 검색, 음악 검색, 제품 추천, 동영상 검색, 위치 기반 검색, 사기 탐지, 이상 탐지 등이 있습니다.
OpenSearch Serverless용 벡터 엔진은 OpenSearch에서 k-Nearest Neighbor(k-NN) 검색 기능을
벡터 엔진은 유클리드 거리, 코사인 유사성, 점 곱 유사성과 같은 거리 측정법을 제공하며 16,000개의 차원을 수용할 수 있습니다. 숫자, 부울, 날짜, 키워드, 지오포인트 등 다양한 메타데이터 유형의 필드를 메타데이터에 저장할 수 있습니다. 설명 정보를 위한 텍스트와 함께 필드를 저장하여 저장된 벡터에 더 많은 컨텍스트를 추가할 수도 있습니다. 데이터 유형을 콜로케이션하면 복잡성이 줄어들고 유지 관리성이 향상되며 데이터 중복, 버전 호환성 문제 및 라이선스 문제를 피할 수 있습니다.
NextGen 벡터 검색 컬렉션
NextGen 벡터 검색은 워크로드를 기반으로 온디맨드 규모를 조정하여 비용과 성능 간의 균형을 최적화합니다. 활성 검색 요청을 처리하는 데 필요한 데이터 블록만 메모리에 로드되며 작업자는 필요한 메모리 및 CPU 리소스에 따라 동적으로 확장됩니다. 수집이 진행 중인 요청 없이 유휴 상태인 경우 인덱싱과 검색 모두 0으로 조정되므로 추가 비용을 절감할 수 있습니다. 기본적으로 NextGen에는 비용과 지연 시간을 줄이면서 리콜을 개선하는 최적화 기능이 내장되어 있습니다.
-
사용자 지정 문서 ID - NextGen 컬렉션에서 사용자 지정 문서 IDs가 지원되므로 고객이 사용자 제공 IDs.
-
32x 압축 인덱스 - 모든 인덱스는 기본적으로 고급 32x 압축 기법으로 생성됩니다. 기본 압축 수준을 재정의하고 지원되는 압축 수준 1x, 2x, 8x, 16x 또는 32x(기본값)를 선택할 수 있습니다.
-
인덱스 빌드 가속화 - GPU 가속화는 기본적으로 대규모 벡터 인덱스를 더 빠르고 효율적으로 빌드하는 데 도움이 되도록 활성화됩니다. 데이터를 벡터 인덱스로 인덱싱하는 데 필요한 시간을 줄여 처리량이 높은 인덱싱 경험과 비용 절감을 제공합니다. GPU 리소스는 인덱스 빌드 작업 중에 필요한 경우에만 프로비저닝됩니다. 설정을 사용하여 인덱스별로 GPU 사용량을 제어할 수 있습니다
index.knn.remote_index_build.enabled. 자세한 내용은 벡터 인덱싱을 위한 GPU 가속화 단원을 참조하십시오. -
간소화된 API - NextGen 벡터 검색 컬렉션에는 인덱스 매핑에
engine및mode파라미터가 필요하지 않습니다. 시스템은 내부적으로 최적의 구성을 자동으로 결정하여 인덱스 생성의 복잡성을 줄입니다. -
최적화된 검색 응답 - 기본적으로 NextGen 벡터 컬렉션의 검색 응답은 결과에서 원래 벡터를 제외합니다. 이렇게 하면 엔드 투 엔드 검색 지연 시간과 응답 페이로드 크기가 줄어듭니다. 검색 응답에 벡터를 포함하려면 섹션을 참조하세요벡터를 사용하여 전체 문서 검색.
-
NextGen 벡터 컬렉션의 read-after-write 지연 시간(
refresh_interval)은 10초입니다.
벡터 검색 컬렉션 시작
이 자습서에서는 벡터 임베딩을 실시간으로 저장, 검색 및 불러오는 다음 단계를 완료합니다.
1단계: 권한 구성
이 자습서를 완료하려면(일반적으로 OpenSearch Serverless를 사용하려면) 올바른 AWS Identity and Access Management (IAM) 권한이 있어야 합니다. 이 자습서에서는 컬렉션을 생성하고 데이터를 업로드하고 검색한 다음 컬렉션을 삭제합니다.
사용자 또는 역할에는 다음과 같은 최소 권한이 포함된 연결된 자격 증명 기반 정책이 있어야 합니다.
OpenSearch Serverless IAM 권한에 대한 자세한 내용은 Amazon OpenSearch Serverless에 대한 Identity and Access Management 섹션을 참조하세요.
2단계: 컬렉션 생성
새 컬렉션을 생성하려면 암호화, 네트워크 및 데이터 액세스 정책을 자동으로 구성하는 통합 컬렉션 생성 흐름(NextGen Express 생성)을 따르세요. 지침은 NextGen 컬렉션 생성(Express 생성) 섹션을 참조하세요.
이 자습서의 나머지 부분에서 예제 모음의 이름은 housing 이며 NextGen 벡터 검색 모음입니다.
참고
대신 Classic 벡터 컬렉션을 생성하도록 선택한 경우 Classic 컬렉션과 관련된 절차는 Classic 벡터 컬렉션 작업 섹션을 참조하세요.
3단계: 데이터 업로드 및 검색
인덱스는 벡터 임베딩 및 기타 필드를 저장, 검색 및 불러올 수 있는 방법을 제공하는 공통 데이터 스키마를 포함하는 문서 컬렉션입니다. Postman
주택 컬렉션에서 데이터를 인덱싱하고 검색하려면
-
새 컬렉션에 대한 인덱스를 생성하려면 개발 도구
콘솔에서 다음 요청을 보냅니다. 기본적으로 유클리드 거리와 32x 압축으로 인덱스를 생성합니다. PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
다른 압축 수준을 사용하려면 필드 매핑
compression_level에서를 설정합니다. 다음 예제에서는가 1x로compression_level설정된 인덱스를 생성합니다.PUT housing-index-1x { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "compression_level": "1x", "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }지원되는 압축 수준은 1x, 2x, 8x, 16x 및 32x입니다.
-
문서를 로 인덱싱하려면 시스템 생성 ID(POST) 또는 사용자 제공 ID(PUT)를 사용할
housing-index수 있습니다.# System-generated document ID POST housing-index/_doc { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } # User-provided document ID PUT housing-index/_doc/100 { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
인덱스의 속성과 유사한 속성을 검색하려면 다음 쿼리를 전송합니다. 기본적으로 검색 응답은 지연 시간과 페이로드 크기를 줄이기
_source위해에서 원래 벡터를 제외합니다.GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }응답은에서
housing-vector필드를 제외합니다_source.{ "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }
벡터를 사용하여 전체 문서 검색
기본 동작을 재정의하려면 검색 요청true에서를 _source로 설정합니다. 의 includes/excludes 옵션을 사용하여 특정 필드를 _source 검색할 수도 있습니다.
GET housing-index/_search { "size": 5, "_source": true, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }
이제 응답에의 housing-vector 필드가 포함됩니다_source.
{ "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "housing-vector": [10, 20, 30], "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }
4단계: 컬렉션 삭제
주택 컬렉션은 테스트용이므로 실험을 마쳤으면 삭제하십시오.
OpenSearch Serverless 컬렉션 삭제하기
-
Amazon OpenSearch Service 콘솔을 엽니다.
-
왼쪽 탐색 창에서 컬렉션을 선택하고 주택 컬렉션을 선택합니다.
-
삭제를 선택하여 삭제를 확인합니다.
필터링된 검색
필터를 사용하여 의미 체계 검색 결과를 구체화할 수 있습니다. 인덱스를 만들고 문서에서 필터링된 검색을 수행하려면 이전 자습서의 데이터 업로드 및 검색을 다음 지침으로 대체하세요. 다른 단계는 동일하게 유지됩니다. 필터에 대한 자세한 내용은 필터를 사용한 k-NN 검색
주택 컬렉션에서 데이터를 인덱싱하고 검색하려면
-
컬렉션에 대해 단일 인덱스를 생성하려면 Dev Tools
콘솔에서 다음 요청을 전송합니다. PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2", "method": { "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
단일 문서를 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" } -
지정된 가격으로 지리적 지점으로부터 일정 거리 내에 있는 시애틀 아파트 데이터를 검색하려면 다음 요청을 보내세요.
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 } } } ] } } } } } }
제한 사항
-
32x 압축을 사용하는 NextGen 벡터 인덱스에서는 방사형 검색이 지원되지 않습니다.
Classic 벡터 컬렉션 작업
클래식 벡터 컬렉션은 OpenSearch Serverless 벡터 검색의 원래 세대입니다. 기존 Classic 벡터 컬렉션이 있는 경우이 섹션의 절차를 사용합니다. 새 컬렉션의 경우 NextGen을 사용하는 것이 좋습니다. NextGen 벡터 컬렉션을 생성컬렉션 생성하려면 섹션을 참조하세요.
참고
-
Amazon OpenSearch Serverless Classic 컬렉션은 32비트 부동 벡터와 16비트 벡터 간의 변환을 수행하는 Faiss 16비트 스칼라 양자화를 지원합니다. 자세한 내용은 Faiss 16비트 스칼라 양자화
를 참조하세요. 이진 벡터를 사용하여 메모리 비용을 줄일 수도 있습니다. 자세한 내용은 이진 벡터 를 참조하세요. -
Amazon OpenSearch Serverless Classic 컬렉션은 디스크 기반 벡터 검색을 지원하므로 메모리가 적은 환경에서 벡터 워크로드의 운영 비용이 크게 절감됩니다. 자세한 내용은 디스크 기반 벡터 검색
을 참조하세요.
다음 예제는 기본적으로 nmslib 엔진을 사용하고 검색 응답에 원래 벡터를 포함하는 Classic 벡터 컬렉션에 적용됩니다.
Classic 주택 컬렉션에서 데이터를 인덱싱하고 검색하려면
-
Classic 컬렉션에 대한 인덱스를 생성하려면 개발 도구
콘솔에서 다음 요청을 보냅니다. 기본적으로 이렇게 하면 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" } } } } -
단일 문서를 housing-index로 인덱싱하려면 다음 요청을 보냅니다.
POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
인덱스의 속성과 유사한 속성을 검색하려면 다음 쿼리를 전송합니다.
GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }
인덱스를 생성하고 필터링된 검색을 수행하려면 다음 예제를 사용합니다. 필터에 대한 자세한 내용은 필터를 사용한 k-NN 검색
Classic 주택 컬렉션에 대해 필터링된 검색을 인덱싱하고 수행하려면
-
컬렉션에 대해 단일 인덱스를 생성하려면 Dev Tools
콘솔에서 다음 요청을 전송합니다. 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" } } } } -
단일 문서를 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" } -
지정된 가격으로 지리적 지점으로부터 일정 거리 내에 있는 시애틀 아파트 데이터를 검색하려면 다음 요청을 보내세요.
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 } } } ] } } } } } }
클래식 벡터 컬렉션에는 다음과 같은 제한 사항이 있습니다.
-
벡터 검색 컬렉션은 Apache Lucene ANN 엔진을 지원하지 않습니다.
-
벡터 검색 컬렉션은 Faiss를 사용하는 HNSW 알고리즘만 지원합니다. IVF 또는 IVFQ는 지원하지 않습니다.
-
벡터 검색 컬렉션은 워밍업, 통계 및 모델 학습 API 작업을 지원하지 않습니다.
-
벡터 검색 컬렉션은 인라인 또는 저장된 스크립트를 지원하지 않습니다.
-
벡터 검색 컬렉션에 AWS Management Console 대한 인덱스 수 정보는에서 사용할 수 없습니다.
-
벡터 검색 컬렉션의 인덱스 새로 고침 간격은 60초입니다.
수십억 규모의 워크로드
클래식 벡터 검색 컬렉션은 수십억 개의 벡터가 있는 워크로드를 지원합니다. Auto Scaling이 자동으로 수행되므로 조정 목적으로 다시 인덱싱할 필요가 없습니다. 차원 수가 많은 수백만 개의 벡터(또는 그 이상)가 있고 200OCUs가 필요한 경우 AWS Support
다음 단계
이제 벡터 검색 컬렉션 및 인덱스 데이터를 생성하는 방법을 알았으므로 다음 연습을 시도할 수 있습니다.
-
OpenSearch Python 클라이언트를 사용하여 벡터 검색 컬렉션을 사용하세요. GitHub
에서 이 튜토리얼을 참조하세요. -
OpenSearch Java 클라이언트를 사용하여 벡터 검색 컬렉션을 사용하세요. GitHub
에서 이 튜토리얼을 참조하세요. -
OpenSearch를 벡터 저장소로 사용하도록 LangChain을 설정하세요. LangChain은 언어 모델을 기반으로 애플리케이션을 개발할 수 있는 오픈 소스 프레임워크입니다. 자세한 내용은 LangChain 설명서
를 참조하세요.