

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

# Amazon S3 벡터 엔진을 사용한 고급 검색 기능
<a name="s3-vector-opensearch-integration-engine"></a>

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 활성화
<a name="s3-vector-opensearch-integration-engine-enable"></a>

[새 도메인을 생성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html)하거나 기존 도메인을 업데이트할 때 **고급 기능** 섹션에서 **엔진 옵션으로 S3 벡터 활성화**를 선택할 수 있습니다. 이 설정을 사용하면 S3 벡터를 엔진으로 활용할 때 OpenSearch가 S3 벡터 버킷을 생성할 수 있습니다. 이 옵션을 활성화하면 OpenSearch는 다음을 통해 도메인에 대한 S3 벡터를 구성합니다.

1. 도메인으로 구성된 AWS KMS 키에 대해 두 개의 새 권한 부여 생성:
   + 암호 해독 권한이 있는 S3 벡터 백그라운드 인덱싱 작업에 대한 권한 부여
   + OpenSearch가 `GenerateDataKey` 권한이 있는 S3 벡터 버킷을 생성할 수 있는 권한 부여

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

## S3 벡터 엔진을 사용하여 인덱스 생성
<a name="s3-vector-opensearch-integration-engine-creating-indexes"></a>

도메인을 구성한 후 인덱스 매핑에서 `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"
        }
    }
}
```

## 기능 제한
<a name="s3-vector-opensearch-integration-engine-functional-limitations"></a>

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


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

| 기능 | 동작 | 
| --- | --- | 
| 인덱스 분할/축소/복제 | 이러한 API는 `knn_vector` 필드의 `s3vector` 엔진으로 구성된 인덱스와 함께 사용하면 실패합니다. | 
| 스냅샷 |  `s3vector` 엔진을 사용하는 인덱스는 스냅샷을 지원하지 않습니다. 관리형 도메인의 경우: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/s3-vector-opensearch-integration-engine.html)  스냅샷은 시점 복구에 사용할 수 없지만 `s3vector` 엔진은 OpenSearch 최적화 인스턴스와 함께 99.999999999%의 내구성을 제공합니다.   | 
| UltraWarm 티어 | `s3vector` 엔진으로 구성된 인덱스는 UltraWarm 티어로 마이그레이션할 수 없습니다. | 
| 클러스터 간 복제 | `s3vector` 엔진으로 구성된 인덱스는 클러스터 간 복제를 지원하지 않습니다. | 
| 우발적 삭제 방지 |  `s3vector` 엔진을 사용하는 인덱스에는 스냅샷이 지원되지 않으므로, 우발적 삭제 방지 기능을 사용할 수 없습니다. 도메인에서 다른 인덱스를 복원할 수 있습니다.  | 
| 방사형 검색 | 방사형 검색을 사용한 쿼리는 `s3vector` 엔진을 사용하는 필드에서 지원되지 않습니다. | 

## 문서 인덱싱
<a name="s3-vector-opensearch-integration-engine-index-documents"></a>

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 }
```

## 문서 검색
<a name="s3-vector-opensearch-integration-engine-searching-documents"></a>

표준 `_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
            }
          }
        }
      }
    }
  }
}
```

## 지원되는 매핑 파라미터
<a name="s3-vector-opensearch-integration-engine-supported-mapping-parameters"></a>

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


**벡터 필드 파라미터**  

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

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

## 계측 및 측정
<a name="s3-vector-opensearch-integration-engine-metering-billing"></a>

이 기능의 측정 및 결제에 대한 자세한 내용은 [Amazon OpenSearch Service 요금을](https://aws.amazon.com/opensearch-service/pricing/) 참조하세요.

## s3vector 엔진 비활성화
<a name="s3-vector-opensearch-integration-engine-disable"></a>

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

또한 `s3vector` 엔진을 활성화하거나 비활성화하면 도메인에 대해 [블루/그린 배포](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/managedomains-configuration-changes.html)가 트리거됩니다.

`s3vector` 엔진을 비활성화하려면 [도메인 구성을 편집](https://docs.aws.amazon.com/cli/latest/reference/opensearch/update-domain-config.html)하고 `S3VectorsEngine.Enabled: false`를 설정합니다.