Amazon S3 벡터 엔진을 사용한 고급 검색 기능 - Amazon OpenSearch Service

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

Amazon S3 벡터 엔진을 사용한 고급 검색 기능

Amazon OpenSearch Service는 Amazon S3를 벡터 인덱스의 벡터 엔진으로 사용하는 기능을 제공합니다. 이 기능을 사용하면 서브 세컨드 수준의 벡터 검색 기능을 저렴한 비용으로 유지하면서 벡터 데이터를 Amazon S3로 오프로드할 수 있습니다.

이 기능을 사용하면 OpenSearch는 다른 문서 필드는 OpenSearch 클러스터의 스토리지에 유지하면서, 벡터 임베딩을 Amazon S3 벡터 인덱스에 저장합니다. 이 아키텍처는 다음과 같은 이점이 있습니다.

  • 내구성: S3 Vectors에 기록된 데이터는 99.999999999%의 데이터 내구성을 제공하도록 설계된 S3에 저장됩니다.

  • 확장성: 클러스터 스토리지를 사용하지 않고 대용량 벡터 데이터 세트를 S3로 오프로드합니다.

  • 비용 효율성: 벡터가 많은 워크로드의 스토리지 비용을 최적화합니다.

OpenSearch에는 S3 벡터 인덱스를 사용하는 데에는 다음과 같은 요구 사항이 적용됩니다.

  • 버전 2.19 이상의 OpenSearch

  • OpenSearch 최적화 인스턴스

  • OpenSearch 릴리스의 최신 패치 버전

S3 Vectors 활성화

새 도메인을 생성하거나 기존 도메인을 업데이트할 때 고급 기능 섹션에서 엔진 옵션으로 S3 벡터 활성화를 선택할 수 있습니다. 이 설정을 사용하면 S3 벡터를 엔진으로 활용할 때 OpenSearch가 S3 벡터 버킷을 생성할 수 있습니다. 이 옵션을 활성화하면 OpenSearch는 다음을 통해 도메인에 대한 S3 벡터를 구성합니다.

  1. 도메인으로 구성된 AWS KMS키에 대해 두 개의 새 권한 부여 생성:

    • 암호 해독 권한이 있는 S3 벡터 백그라운드 인덱싱 작업에 대한 권한 부여

    • OpenSearch가 GenerateDataKey 권한이 있는 S3 벡터 버킷을 생성할 수 있는 권한 부여

  2. OpenSearch 도메인에서 사용하는 KMS 키를 모든 벡터 인덱스 데이터의 나머지 부분에서 암호화를 위한 CMK로 구성합니다.

S3 벡터 엔진을 사용하여 인덱스 생성

도메인을 구성한 후 인덱스 매핑에서 s3vector를 백엔드 벡터 엔진으로 사용하여 필드를 사용하여 하나 이상의 k-NN 인덱스를 생성할 수 있습니다. 사용 사례에 따라 다양한 엔진 유형으로 다양한 벡터 필드를 구성할 수 있습니다.

중요

s3vector 엔진은 인덱스 생성 중에 필드 정의를 매핑할 때만 사용할 수 있습니다. 인덱스 생성 후에는 s3vector 엔진과의 매핑을 추가하거나 업데이트할 수 없습니다.

다음은 S3 벡터 엔진 인덱스를 생성하는 몇 가지 예입니다.

예: S3 벡터 엔진을 사용하여 k-NN 인덱스 생성

PUT my-first-s3vector-index { "settings": { "index": { "knn": true } }, "mappings": { "properties": { "my_vector_1": { "type": "knn_vector", "dimension": 2, "space_type": "l2", "method": { "engine": "s3vector" } }, "price": { "type": "float" } } } }

예: S3 벡터와 FAISS 엔진을 모두 사용하여 k-NN 인덱스 생성

이 예는 동일한 인덱스 내에서 여러 벡터 엔진을 사용할 수 있음을 잘 보여줍니다.

PUT my-vector-index { "settings": { "index": { "knn": true } }, "mappings": { "properties": { "my_vector_1": { "type": "knn_vector", "dimension": 2, "space_type": "l2", "method": { "engine": "s3vector" } }, "price": { "type": "float" }, "my_vector_2": { "type": "knn_vector", "dimension": 2, "space_type": "cosine", "method": { "name": "hnsw", "engine": "faiss", "parameters": { "ef_construction": 128, "m": 24 } } } } } }

지원되지 않는 예: 인덱스 생성 후 S3 벡터 엔진 추가

다음 접근 방식은 지원되지 않으며 실패합니다.

PUT my-first-s3vector-index { "settings": { "index": { "knn": true } } } PUT my-first-s3vector-index/_mapping { "properties": { "my_vector_1": { "type": "knn_vector", "dimension": 2, "space_type": "l2", "method": { "engine": "s3vector" } }, "price": { "type": "float" } } }

기능 제한

인덱스에 s3vector 엔진을 사용하기 전에 다음 제한 사항을 고려하세요.

s3vector 엔진에서 지원되지 않는 기능 및 동작
기능 동작

인덱스 분할/축소/복제

이러한 API는 knn_vector 필드의 s3vector 엔진으로 구성된 인덱스와 함께 사용하면 실패합니다.

스냅샷

s3vector 엔진을 사용하는 인덱스는 스냅샷을 지원하지 않습니다. 관리형 도메인의 경우:

  • 자동 스냅샷에는 s3vector 엔진을 사용하지 않는 인덱스만 포함됩니다.

  • s3vector 인덱스에 대한 수동 스냅샷 요청은 실패합니다.

참고

스냅샷은 시점 복구에 사용할 수 없지만 s3vector 엔진은 OpenSearch 최적화 인스턴스와 함께 99.999999999%의 내구성을 제공합니다.

UltraWarm 티어

s3vector 엔진으로 구성된 인덱스는 UltraWarm 티어로 마이그레이션할 수 없습니다.

클러스터 간 복제

s3vector 엔진으로 구성된 인덱스는 클러스터 간 복제를 지원하지 않습니다.

우발적 삭제 방지

s3vector 엔진을 사용하는 인덱스에는 스냅샷이 지원되지 않으므로, 우발적 삭제 방지 기능을 사용할 수 없습니다. 도메인에서 다른 인덱스를 복원할 수 있습니다.

방사형 검색

방사형 검색을 사용한 쿼리는 s3vector 엔진을 사용하는 필드에서 지원되지 않습니다.

문서 인덱싱

S3 벡터 엔진으로 인덱스를 생성한 후 표준 _bulk API를 사용하여 문서를 수집할 수 있습니다. OpenSearch는 s3vector 엔진을 사용하여 knn_vector 필드의 벡터 데이터를 S3 벡터 인덱스로 실시간으로 자동 오프로드합니다. 다른 엔진을 사용하는 다른 필드 또는 knn_vector 필드에 속한 데이터는 OpenSearch에 의해 자체 스토리지 계층에 유지됩니다.

승인된 모든 대량 요청에 대해 OpenSearch는 모든 데이터(벡터 및 비벡터)의 내구성을 보장합니다. 요청이 부정 승인을 받는 경우 해당 대량 요청의 문서 내구성은 보장되지 않습니다. 이러한 드문 경우에는 문서 ID를 사용하여 이전에 실패한 요청을 삭제한 후 이러한 요청을 다시 시도하여 문서가 중복되지 않도록 해야 합니다.

대량 인덱싱 예

POST _bulk { "index": { "_index": "my-first-s3vector-index", "_id": "1" } } { "my_vector_1": [1.5, 2.5], "price": 12.2 } { "index": { "_index": "my-first-s3vector-index", "_id": "2" } } { "my_vector_1": [2.5, 3.5], "price": 7.1 } { "index": { "_index": "my-first-s3vector-index", "_id": "3" } } { "my_vector_1": [3.5, 4.5], "price": 12.9 } { "index": { "_index": "my-first-s3vector-index", "_id": "4" } } { "my_vector_1": [5.5, 6.5], "price": 1.2 } { "index": { "_index": "my-first-s3vector-index", "_id": "5" } } { "my_vector_1": [4.5, 5.5], "price": 3.7 }

문서 검색

표준 _search API를 통해 인덱스를 검색하여 텍스트, k-NN 또는 하이브리드 쿼리를 실행할 수 있습니다. s3vector 엔진으로 구성된 knn_vector 필드에 대한 쿼리의 경우, OpenSearch는 쿼리를 해당 S3 벡터 인덱스로 자동 오프로드합니다.

참고

s3vector 엔진에서 k-NN 검색 쿼리는 최대값 k 100을 지원합니다. 즉, 검색 결과에 최대 100개의 가장 가까운 이웃을 반환할 수 있습니다.

검색 쿼리 예

GET my-first-s3vector-index/_search { "size": 2, "query": { "knn": { "my_vector_1": { "vector": [2.5, 3.5], "k": 2 } } } }

s3vector 엔진을 사용하여 OpenSearch kNN 인덱스에서 필터링된 벡터 검색을 실행할 수 있습니다. OpenSearch는 필터를 사후 필터로 적용하고 특정 휴리스틱을 기반으로 오버샘플링 메커니즘을 사용하여 재현율과 지연 시간의 균형을 맞춥니다.

필터를 사용한 검색 쿼리 예:

GET my-index/_search { "size": 10, "query": { "knn": { "my_vector_field": { "vector": [2.5, 3.5, 1.2, 4.8], "k": 10, "filter": { "range": { "price": { "gte": 10, "lte": 100 } } } } } } }

지원되는 매핑 파라미터

s3vector 엔진의 경우 knn_vector 필드는 매핑에서 다음 파라미터를 지원합니다.

벡터 필드 파라미터
파라미터 필수 설명 지원되는 값
type 문서에 있는 필드의 유형입니다. knn_vector
dimension 인덱스에 수집되는 각 벡터의 차원입니다. >0, <=4096
space_type 아니요 벡터 간 거리를 계산하는 데 사용되는 벡터 스페이스입니다. l2, cosinesimil
method.engine 인덱싱 및 검색에 사용할 대략적인 k-NN 엔진입니다. s3vector
method.name 아니요 가장 가까운 이웃 방법 ""
store 해당 사항 없음 knn_vector 데이터는 OpenSearch에 저장되지 않으므로이 매핑 파라미터를 활성화하거나 비활성화하는 것은 작동하지 않습니다. 지원되지 않음
doc_values 해당 사항 없음 knn_vector 데이터는 OpenSearch에 저장되지 않으므로이 매핑 파라미터를 활성화하거나 비활성화하는 것은 작동하지 않습니다. 지원되지 않음
중요

중첩 knn_vector 필드 유형은 s3vector 엔진을 사용할 경우 지원되지 않습니다.

계측 및 측정

이 기능의 측정 및 결제에 대한 자세한 내용은 Amazon OpenSearch Service 요금을 참조하세요.

s3vector 엔진 비활성화

s3vector 엔진을 비활성화하기 전에, 현재 사용 중인 모든 인덱스를 삭제합니다. 그렇지 않으면 엔진 비활성화 시도가 실패합니다.

또한 s3vector 엔진을 활성화하거나 비활성화하면 도메인에 대해 블루/그린 배포가 트리거됩니다.

s3vector 엔진을 비활성화하려면 도메인 구성을 편집하고 S3VectorsEngine.Enabled: false를 설정합니다.