문서 홈 → MongoDB 실행 및 관리 → MongoDB Atlas
knnBeta
정의
knnBeta
연산자는
knnBeta
Hierarchical Navigable Small Worlds 를 사용합니다. 알고리즘을 사용하여 시맨틱 검색을 수행합니다.kNN 쿼리에 대한 Atlas Search 지원을 사용하여 선택한 제품과 유사한 검색, 이미지 검색 등을 수행할 수 있습니다.
구문
knnBeta
의 구문은 다음과 같습니다:
1 { 2 $search: { 3 "index": "<index name>", // optional, defaults to "default" 4 "knnBeta": { 5 "vector": [<array-of-numbers>], 6 "path": "<field-to-search>", 7 "filter": {<filter-specification>}, 8 "k": <number>, 9 "score": {<options>} 10 } 11 } 12 }
옵션
필드 | 유형 | 설명 | 필요성 |
---|---|---|---|
filter | 문서 | Atlas Search에서는 메타데이터나 특정 검색 기준에 따라 문서를 필터링 할 수 있는 다양한 연산자를 제공하여, 벡터 검색의 범위를 좁힐 수 있습니다. | 옵션 |
k | 숫자 | 반환할 가장 가까운 이웃의 수입니다. 반환할 문서 수( $limit )보다 많은 숫자를 지정하여 정확도를 높일 수 있습니다. | 필수 사항 |
path | 문자열 | 필수 사항 | |
score | 문서 | 결과에서 일치하는 문서에 할당된 점수입니다. 자세한 내용은 채점 동작을 참조하세요. | 옵션 |
vector | 숫자 배열 | 쿼리 벡터를 나타내는 BSON 유형 int 또는 double 의 숫자 배열입니다. 배열 크기는 필드의 인덱스에 지정된 벡터 dimensions 수와 일치해야 합니다. | 필수 사항 |
행동
Atlas Search 유형 knnVector로 인덱싱된 필드에 대해서만 kNN 쿼리를 실행할 수 있습니다.
단계 뒤에 를 사용하여 쿼리 결과의 문서 수를 제한할 수 $limit
있습니다. 값을 값보다 $search
knnBeta
k
높게 설정하는 $limit
것이 좋습니다. 이러한 과다 요청 패턴은 대략적인 근접 이웃 검색에서 지연 시간과 리콜의 균형을 맞출 수 있는 주요 방법입니다. 경험상 - 의 배수는 510 많은 사용 사례에서 잘 작동하는 것으로 나타났지만, 특정 데이터 세트에 맞게 이 배수를 조정하는 것이 좋습니다.
예제
다음 쿼리는 쿼리에 대해 150
개의 가장 근접한 이웃을 찾고 나머지 결과 수를 50
개로 제한합니다.
1 db.<collection>.aggregate({ 2 "$search": { 3 "knnBeta": { 4 "vector": <array-of-numbers-to-search>, 5 "path": <indexed-field-to-search>, 6 "k": 150 7 } 8 } 9 }, 10 { 11 "$limit": 50 12 })
성능
쿼리 성능을 향상시키려면 결과에 모든 필드가 필요한 경우를 제외하고 $project
단계를 사용하여 결과에 반환할 필드를 선택합니다. $project
단계에서 벡터 필드를 제외하는 것이 좋습니다.
득점
단계에서 score
필드를 $meta 표현식 searchScore
과 함께 $project
사용하여 결과에서 문서의 점수를 반환할 수 있습니다.
Atlas Search는 0
에서 1
사이의 고정된 범위에서만 kNN 쿼리에 대한 결과의 점수를 매깁니다. cosine
및 dotProduct
유사도에 대해서는 Atlas Search가 다음 알고리즘을 사용하여 점수를 정규화합니다:
score = (1 + cosine/dot_product(v1,v2)) / 2
제한 사항
knnBeta
연산자는 쿼리의 최상위 연산자여야 하므로, 다음과 같은 연산자 내에서 knnBeta
연산자를 사용할 수 없습니다.
vectorSearch 유형 인덱스를 사용하여 인덱싱된 필드에는 knnBeta
연산자를 사용하여 쿼리할 수 없습니다. knnBeta
연산자와 함께 $search
정렬 옵션을 사용할 수 없습니다.
단계 이후에는 $skip
$limit
$search
및 를 사용하여 Atlas Search 결과 페이지 매김을 하지 않는 것이 좋습니다.
예제
다음 쿼리는 knnBeta
연산자를 사용하여 샘플 sample_mflix.embedded_movies
컬렉션을 검색합니다. 쿼리는 OpenAI의 text-embedding-ada-002
임베딩 모델을 사용하여 생성된 임베딩이 포함된 plot_embedding
필드를 검색합니다. 샘플 컬렉션을 Atlas 클러스터에 추가하고 컬렉션에 대한 샘플 인덱스 정의를 만든 경우 sample_mflix
데이터베이스로 전환하여 컬렉션에 대해 다음 쿼리를 실행할 수 있습니다.