쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Amazon OpenSearch Service의 k-Nearest Neighbor(k-NN) 검색

포커스 모드
Amazon OpenSearch Service의 k-Nearest Neighbor(k-NN) 검색 - Amazon OpenSearch Service

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

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

연결된 k-nearest neighbors 알고리즘의 약자인 Amazon OpenSearch Service용 k-NN을 사용하면 벡터 공간에서 지점을 검색하고 유클리드 거리 또는 코사인 유사성별로 해당 지점에 대한 '가장 가까운 이웃'을 찾을 수 있습니다. 사용 사례에는 권장 사항(예: 음악 애플리케이션의 “좋아하는 다른 노래” 기능), 이미지 인식 및 사기 탐지가 포함됩니다.

참고

이 설명서에서는 OpenSearch 서비스 및 다양한 버전의 k-NN 플러그인 간의 버전 호환성과 관리형 OpenSearch 서비스와 함께 플러그인을 사용할 때의 제한 사항에 대해 설명합니다. 간단하고 복잡한 예제, 파라미터 참조 및 플러그인에 대한 전체 API 참조를 포함하여 k-NN 플러그인에 대한 포괄적인 설명서는 오픈 소스 OpenSearch 설명서를 참조하세요. 오픈 소스 설명서에서는 성능 튜닝 및 k-NN-specific 클러스터 설정도 다룹니다.

다음 테이블을 사용하여 Amazon OpenSearch Service 도메인에서 실행되는 k-NN 플러그인의 버전을 찾습니다. 각 k-NN 플러그인 버전은 OpenSearch 또는 Elasticsearch 버전에 해당합니다.

OpenSearch
OpenSearch 버전 k-NN 플러그인 버전 주목할 만한 기능
2.13 2.13.0.0

2.11 2.11.0.0

k-NN 쿼리에서 ignore_unmapped에 대한 지원 추가

2.9 2.9.0.0 Faiss 엔진으로 k-NN 바이트 벡터 및 효율적인 필터링 구현
2.7 2.7.0.0
2.5 2.5.0.0 k-NN 모델 시스템 인덱스 SystemIndexPlugin 용으로 확장되고 코어 HybridFS에 Lucene별 파일 확장명 추가
2.3 2.3.0.0
1.3 1.3.0.0
1.2 1.2.0.0 Faiss 라이브러리에 대한 지원 추가
1.1 1.1.0.0
1.0

1.0.0.0

이전 버전과의 호환성을 지원RESTAPIs하면서 이름이 변경되고 네임스페이스의 이름이에서 opendistro로 변경되었습니다. opensearch
Elasticsearch
Elasticsearch 버전 k-NN 플러그인 버전 주목할 만한 기능
7.1

1.3.0.0

유클리드 거리
7.4

1.4.0.0

7.7

1.8.0.0

코사인 유사성
7.8

1.9.0.0

7.9

1.11.0.0

워밍업API, 사용자 지정 점수

7.10

1.13.0.0

Hamming 거리, L1 표준 거리, Painless 스크립팅

k-NN 시작하기

k-NN을 사용하려면 index.knn 설정으로 인덱스를 만들고 knn_vector 데이터 유형의 필드를 하나 이상 추가해야 합니다.

PUT my-index { "settings": { "index.knn": true }, "mappings": { "properties": { "my_vector1": { "type": "knn_vector", "dimension": 2 }, "my_vector2": { "type": "knn_vector", "dimension": 4 } } } }

knn_vector 데이터 유형은 필수 dimension 파라미터로 정의된 부동 소수점 수를 사용하여 최대 10,000개의 부동 소수점으로 구성된 단일 목록을 지원합니다. 인덱스를 생성한 후 일부 데이터를 추가합니다.

POST _bulk { "index": { "_index": "my-index", "_id": "1" } } { "my_vector1": [1.5, 2.5], "price": 12.2 } { "index": { "_index": "my-index", "_id": "2" } } { "my_vector1": [2.5, 3.5], "price": 7.1 } { "index": { "_index": "my-index", "_id": "3" } } { "my_vector1": [3.5, 4.5], "price": 12.9 } { "index": { "_index": "my-index", "_id": "4" } } { "my_vector1": [5.5, 6.5], "price": 1.2 } { "index": { "_index": "my-index", "_id": "5" } } { "my_vector1": [4.5, 5.5], "price": 3.7 } { "index": { "_index": "my-index", "_id": "6" } } { "my_vector2": [1.5, 5.5, 4.5, 6.4], "price": 10.3 } { "index": { "_index": "my-index", "_id": "7" } } { "my_vector2": [2.5, 3.5, 5.6, 6.7], "price": 5.5 } { "index": { "_index": "my-index", "_id": "8" } } { "my_vector2": [4.5, 5.5, 6.7, 3.7], "price": 4.4 } { "index": { "_index": "my-index", "_id": "9" } } { "my_vector2": [1.5, 5.5, 4.5, 6.4], "price": 8.9 }

그런 다음 knn 쿼리 유형을 사용하여 데이터를 검색할 수 있습니다.

GET my-index/_search { "size": 2, "query": { "knn": { "my_vector2": { "vector": [2, 3, 5, 6], "k": 2 } } } }

이 경우 k는 쿼리를 반환하려는 이웃 수입니다. 하지만 size 옵션도 포함해야 합니다. 그렇지 않으면 전체 쿼리에 대한 k 결과가 아닌 각 샤드(및 각 세그먼트)에 대한 k 결과를 얻습니다. k-NN은 최대 k 값인 10,000을 지원합니다.

knn 쿼리를 다른 절과 혼합하면 k 결과보다 적게 수신할 수 있습니다. 이 예제에서 post_filter 절은 결과 수를 2에서 1로 줄입니다.

GET my-index/_search { "size": 2, "query": { "knn": { "my_vector2": { "vector": [2, 3, 5, 6], "k": 2 } } }, "post_filter": { "range": { "price": { "gte": 6, "lte": 10 } } } }

최적의 성능을 유지하면서 대량의 쿼리를 처리해야 하는 경우 _msearchAPI를 사용하여 로 대량 검색을 구성JSON하고 단일 요청을 전송하여 여러 검색을 수행할 수 있습니다.

GET _msearch { "index": "my-index"} { "query": { "knn": {"my_vector2":{"vector": [2, 3, 5, 6],"k":2 }} } } { "index": "my-index", "search_type": "dfs_query_then_fetch"} { "query": { "knn": {"my_vector1":{"vector": [2, 3],"k":2 }} } }

다음 동영상은 K-NN 쿼리에 대한 대량 벡터 검색을 설정하는 방법을 보여줍니다.

k-NN의 차이점, 조정, 제한 사항

OpenSearch 를 사용하면를 사용하여 모든 _cluster/settings k-NN 설정을 수정할 수 있습니다API. OpenSearch 서비스에서는 knn.memory.circuit_breaker.enabled 및를 제외한 모든 설정을 변경할 수 있습니다knn.circuit_breaker.triggered. k-NN 통계는 Amazon CloudWatch 지표로 포함됩니다.

특히 knn.memory.circuit_breaker.limit 통계 및 인스턴스 유형에 RAM 사용할 수 있는 KNNGraphMemoryUsage와 비교하여 각 데이터 노드의 지표를 확인합니다. OpenSearch 서비스는 Java 힙(최대 힙 크기 32GiB)RAM에 인스턴스의 절반을 사용합니다. 기본적으로 k-NN은 나머지 절반의 최대 50%를 사용하므로 32GiB의 인스턴스 유형은 8GiB의 그래프(32*0.5*0.5)를 수용할 RAM 수 있습니다. 그래프 메모리 사용량이 이 값을 초과하면 성능이 저하될 수 있습니다.

버전 2.x 이상에서 생성된 k-NN 인덱스를 버전 2.17 이상의 도메인에서 UltraWarm 또는 콜드 스토리지로 마이그레이션할 수 있습니다.

k-NN 인덱스에 대한 캐시 API 및 워밍업 API는 웜 인덱스에 대해 차단됩니다. 인덱스에 대한 첫 번째 쿼리가 시작되면 Amazon S3에서 그래프 파일을 다운로드하고 그래프를 메모리에 로드합니다. 마찬가지로 TTL가 그래프에 대해 만료되면 파일이 메모리에서 자동으로 제거됩니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.