MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/ /

Vector Search 쿼리 실행

MongoDB Vector Search 쿼리는 첫 번째 단계로 $vectorSearch 를 사용하는 집계파이프라인 의 형태를 취합니다. 이 가이드 $vectorSearch 단계의 구문, 옵션 및 동작에 대해 설명합니다.

$vectorSearch

$vectorSearch 단계는 지정된 필드 에서 쿼리 벡터에 대한 시맨틱 검색 수행합니다. 필드 는 vectorSearch 유형 인덱스 내에서 MongoDB Vector Search 벡터 유형으로 인덱싱되어야 합니다.

참고

MongoDB Vector Search는 MongoDB v6.0.11를 실행 클러스터에서 ANN 검색 지원하며, v7.0.2 이상 및 MongoDB v.. 를 실행 클러스터에서 ENN 검색 6 016, v7.0.10, v7.3.2, 또는 그 이후 버전.

Atlas UI, mongosh 및 모든 MongoDB $vectorSearch운전자 사용하여 쿼리를 실행 수 있습니다.

Atlas CLI 사용하여 만든 로컬 Atlas 배포와 함께 MongoDB Vector Search를 사용할 수도 있습니다. 자세히 학습 로컬 Atlas 배포 만들기를 참조하세요.

$vectorSearch 다음 MongoDB 버전을 실행하는 Atlas 클러스터에서만 지원됩니다.

  • v6.0.11

  • v7.0.2 이상(RC 포함)

검색 하려는 필드 는 vectorSearch 인덱스 유형 내에서 MongoDB Vector Search 벡터 유형으로 인덱싱되어야 합니다.

$vectorSearch 파이프라인의 프로토타입 형식은 다음과 같습니다.

{
"$vectorSearch": {
"exact": true | false,
"filter": {<filter-specification>},
"index": "<index-name>",
"limit": <number-of-results>,
"numCandidates": <number-of-candidates>,
"path": "<field-to-search>",
"queryVector": [<array-of-numbers>],
"explainOptions": {
"traceDocumentIds": [<array-of-documentIDs>]
},
"searchNodePreference": {
"key": <preference-string>
}
}
}

$vectorSearch 단계에서는 다음 필드가 있는 문서를 사용합니다.

필드
유형
필요성
설명

exact

부울

옵션

numCandidates를 생략한 경우 필수 항목입니다.

ENN 또는 ANN 검색을 실행할지 여부를 지정하는 플래그입니다. 값은 다음 중 하나일 수 있습니다.

  • false - ANN 검색 실행 시

  • true - ENN 검색 실행 시

생략하는 경우 기본값은 false입니다.

MongoDB Vector Search는 MongoDB v6.0.11를 실행 클러스터에서 ANN 검색 지원하며, v7.0.2 이상 및 MongoDB v 를 실행 클러스터에서 ENN 검색 6 016.., v7.0.10, v7.3.2, 또는 그 이후 버전.

이러한 검색 유형에 대해 자세히 학습하려면 벡터 검색 유형을 참조하세요.

filter

문서

옵션

사전 필터로 사용할 인덱스 필드를 비교하는 MQL 표현식입니다. 이러한 유형의 배열을 포함하여 불리언, 날짜, ObjectID, 숫자, string 및 UUID 값을 기준으로 필터링할 수 있습니다.

MongoDB Vector Search가 필터하다 에서 지원하는 MQL 연산자를 학습하려면 MongoDB Vector Search 사전 필터링을 참조하세요.

index

문자열

필수 사항

사용할 MongoDB Vector Search 인덱스 의 이름입니다.

인덱스 이름의 철자가 잘못되었거나 지정된 인덱스 클러스터 에 없는 경우 MongoDB Vector Search는 결과를 반환하지 않습니다.

limit

숫자

필수 사항

결과에 반환할 문서 수(int 유형만 해당)입니다. numCandidates를 지정하는 경우 이 값은 numCandidates 값을 초과할 수 없습니다.

numCandidates

숫자

조건부

exactfalse이거나 생략된 경우 이 필드는 필수입니다.

검색 중에 사용할 가장 가까운 이웃의 수입니다. 값은 (<=)10000보다 작거나 같아야 합니다. 반환할 문서 수보다 작은 숫자는 지정할 수 없습니다(limit).

정확도를 높이기 위해 반환할 문서 수(limit)보다 최소 20배 더 높은 숫자를 지정하는 것이 좋습니다.

이러한 과다 요청 패턴은 근사 최근접 이웃 검색에서 지연 시간과 재현율을 균형 있게 조절하는 데 권장되는 방법이며, 특정 데이터 세트 크기와 쿼리 요구 사항에 따라 이 매개변수를 조정하는 것이 좋습니다.

이 매개변수에 영향을 줄 수 있는 다른 변수에 대해 자세히 알아보려면 numCandidates 선택을 참조하세요.

path

문자열

필수 사항

검색할 인덱싱된 벡터 유형 필드입니다.

queryVector

숫자 배열

필수 사항

float32 숫자 배열, 하위 유형 float32를 사용하는 BSON BinData 벡터, 또는 하위 유형 int1 또는 int8 유형을 사용하는 BSON BinData 벡터로 쿼리 벡터를 나타냅니다.

하위 유형 float32, int8, int1을 사용하는 BSON binData 벡터를 생성하는 방법에 대해 자세히 학습하려면 사전 양자화된 벡터를 수집하는 방법을 참조하세요.

배열 크기는 필드에 대한 인덱스 정의에서 지정된 벡터 dimensions의 수와 일치해야 합니다.

데이터를 임베드할 때 사용한 것과 동일한 모델을 사용하여 쿼리를 임베드해야 합니다.

벡터 하위 유형이 동일한 한 완전 충실도 벡터를 사용하여 임베딩을 쿼리 할 수 있습니다. 이는 하위 유형이 float32binData 벡터에서만 가능합니다. 다른 하위 유형(int8 또는 int1)을 사용하는 경우 MongoDB Vector Search는 결과나 오류를 반환하지 않습니다.

explainOptions

문서

옵션

설명 executionStats 쿼리에서 벡터 목록(_id으로 식별됨)을 추적합니다. explain 없이는 이 옵션을 사용할 수 없습니다. 자세한 학습 은 MongoDB 벡터 검색 결과 설명을 참조하세요.

explainOptions.
traceDocumentIds

문서 ID 배열

필수 사항

문서 _id목록입니다.

searchNodePreference

객체

옵션

이 쿼리 에 대한 우선 라우팅을 활성화하는 문서입니다. 이 필드 에 값을 설정하다 하면 Atlas 해당 값이 동일하게 유지되는 한 동일한 검색 노드 에 대해 이 쿼리 실행하여 기본값 쿼리 라우팅 동작을 재정의합니다.

이 문서 에는 key 값이 임의의 string인 키-값 쌍이 포함되어 있습니다.

중요: 이 설정을 사용하면 검색 결과의 일관성 향상시킬 수 있지만 영구적인 일관성 보장하지는 않습니다. 데이터 세트, 인덱스 구조, 클러스터 토폴로지 또는 기본 설정 노드 가용성을 변경하면 여전히 불일치가 발생할 수 있습니다.

$vectorSearch 단계를 정의할 때 exact 필드 사용하여 ANN 또는 ENN 검색 실행 할지 여부를 지정할 수 있습니다.

근사 최근접 이웃(ANN) 검색 의 경우, MongoDB 벡터 검색은 다차원 공간에서의 근접성과 고려하는 이웃 수를 기반으로 쿼리 의 벡터 임베딩에 가장 가까운 데이터의 벡터 임베딩을 찾습니다. Hierarchical Navigable Small Worlds 알고리즘 사용하여 모든 벡터를 스캔하지 않고도 쿼리 에서 벡터 임베딩과 가장 유사한 벡터 임베딩을 찾습니다. 따라서 근사 최근접 이웃 검색은 중요한 필터링 없이 대규모 데이터 세트를 쿼리하는 데 이상적입니다.

참고

ANN검색 에 대한 최적의 재현율은 90일반적으로95 ENN 검색 과 결과에서 약 ~ %가 겹치지만 지연 시간 상당히 짧은 것으로 간주됩니다. 이를 통해 정확도와 성능 간에 적절한 균형을 맞출 수 있습니다. MongoDB Vector Search를 사용하여 이를 달성하려면 쿼리 시 numCandidates 매개변수를 조정 합니다.

근사 최근접 이웃 검색 실행 하려면 numCandidates 필드 지정해야 합니다. 이 필드 MongoDB Vector Search가 검색 중에 고려하는 가장 가까운 이웃의 수를 결정합니다.

정확성을 높이고 등가 최근접 이웃근사 최근접 이웃 쿼리 결과 간의 불일치를 줄이기 위해 반환할 문서 수(limit)보다 20 배 이상 많은 numCandidates 숫자를 지정하는 것이 좋습니다. 예시 를 들어 5 결과를 반환하도록 limit 을 설정하다 경우 점 으로 numCandidates100 로 설정하는 것이 좋습니다. 자세히 학습하려면 쿼리 결과의 정확성을 측정하는 방법을 참조하세요.

이러한 과다 요청 패턴 ANN검색에서 지연 시간 과 리콜의 균형을 맞추는 데 권장되는 방법입니다. 그러나 특정 데이터 세트 크기와 쿼리 사항에 따라 numCandidates 매개 변수를 조정하는 것이 좋습니다. 정확한 결과를 얻으려면 다음 변수를 고려하세요.

  • 인덱스 크기: 더 큰 컬렉션은 일반적으로 재현율을 유지하기 위해 더 높은 numCandidates 값이 필요합니다. 수백만 개의 벡터가 있는 컬렉션은 수천 개의 벡터가 있는 컬렉션보다 훨씬 더 많은 후보가 필요할 수 있습니다.

  • 한계 값: numCandidates는 인덱스 크기와 밀접하게 연관되어 있으므로 낮은 limit 값은 재현율을 유지하기 위해 더 높은 numCandidates 값이 필요합니다.

  • 벡터 양자화: 양자화된 벡터는 저장 공간을 줄이는 대신 정확도가 감소할 수 있습니다. 양자화된 벡터(int8 또는 int1 하위 유형)를 사용하는 경우 유사한 재현율을 유지하기 위해 전체 정밀도 float32 벡터에 비해 더 높은 numCandidates 값이 필요할 수 있습니다.

정확한 인접 이웃(ENN) 검색 의 경우, MongoDB Vector Search는 모든 임베딩 사이의 거리를 계산하여 인덱싱된 모든 벡터 임베딩을 철저하게 검색하고 쿼리 의 벡터 임베딩에 대해 가장 가까운 이웃을 찾습니다. 이는 계산 집약적이며 쿼리 지연 시간 부정적인 영향 수 있습니다. 따라서 다음과 같은 사용 사례에 대해 등가 최근접 이웃 을 검색할 것을 권장합니다.

  • 등가 최근접 이웃 쿼리의 이상적이고 정확한 결과를 사용하여 근사 최근접 이웃 쿼리의 재현율과 정확도를 판단하고자 합니다.

  • 고려할 가장 가까운 이웃 수를 조정하지 않고도 10000개 미만의 문서를 쿼리하려고 합니다.

  • 주어진 사전 필터를 충족하는 데이터가 5% 미만인 컬렉션에 대한 쿼리에 선택적 사전 필터를 포함하려고 합니다.

자동 양자화를 활성화 하면 MongoDB Vector Search는 ENN 쿼리에 완전 충실도 벡터만 사용합니다.

  • $vectorSearch 표시되는 파이프라인의 첫 번째 단계에 있어야 합니다.

$vectorSearch보기 정의 및 다음 파이프라인 단계에서 사용할 수 없습니다.

[1] $vectorSearch 의 결과를 이 단계로 전달할 수 있습니다.

vectorSearch 유형 인덱스 $vectorSearch 정의 내의 단계를 사용하여 검색 할 필드를 인덱스 해야 합니다. MongoDB Vector Search vectorSearch 유형 인덱스 정의에서 다음 유형의 필드를 인덱스 할 수 있습니다.

  • 벡터 유형으로 벡터 임베딩을 포함하는 필드입니다.

  • 사전 필터링된 데이터에서 벡터 검색을 활성화하기 위해 필터 유형으로 추가 필드를 사용합니다.

이러한 MongoDB 벡터 검색 필드 유형에 대해 자세히 학습하려면 벡터 검색을 위해 필드를 인덱싱하는 방법을 참조하세요.

MongoDB Vector Search는 반환하는 모든 문서 에 0 ~ 1 (여기서 0 는 낮은 유사성을 나타내고 1 은 높은 유사성을 나타냅니다)까지 고정된 범위 의 점수를 할당합니다.

점수는 MongoDB Vector Search 검색 인덱스 정의에 지정한 similarity 함수에 따라 계산됩니다. 선택할 수 있는 similarity 옵션에 대해 자세히 학습 유사성 함수 정보를 참조하세요.

반환된 각 문서 점수가 메타데이터 로 포함됩니다. 각 문서의 점수를 결과 세트와 함께 반환하려면 집계 파이프라인에서 $project 단계를 사용하고 score 를 프로젝트할 필드로 구성합니다. score 필드에 vectorSearchScore 값을 사용하여 $meta 표현식을 지정합니다. 구문은 다음과 같습니다.

1db.<collection>.aggregate([
2 {
3 "$vectorSearch": {
4 <query-syntax>
5 }
6 },
7 {
8 "$project": {
9 "<field-to-include>": 1,
10 "<field-to-exclude>": 0,
11 "score": { "$meta": "vectorSearchScore" }
12 }
13 }
14])

참고

파이프라인 단계 이후에만 $vectorSearch $meta 표현식 으로 사용할 수 vectorSearchScore 있습니다.score 다른 쿼리 뒤에 vectorSearchScore 를 사용하면 MongoDB MongoDB v8.2부터 경고를 기록합니다.

참고

데이터를 사전 필터링해도 MongoDB Vector Search가 $vectorSearch 쿼리에 대해 vectorSearchScore 를 사용하여 반환하는 점수에는 영향을 주지 않습니다.

$vectorSearch filter 옵션은 BSON 불리언, 날짜, objectId, 숫자, string 및 UUID 값과 일치하며, 이러한 유형의 배열도 포함됩니다.

데이터 필터링에 사용할 필드를 반드시 vectorSearch 유형 인덱스 정의의 필터 유형으로 인덱싱해야 합니다. 데이터 필터링은 시맨틱 검색의 범위를 좁히고 일부 벡터가 비교 대상으로 고려되지 않도록 하는 데 유용합니다.

MongoDB Vector Search는 $vectorSearch filter 다음 MQL 연산자에 대해 옵션을 지원합니다.

유형
MQL 연산자

동등성

범위

집합 내

존재

논리

참고

$vectorSearch filter 옵션은 다른 쿼리 연산자, 집계 파이프라인 연산자 또는 MongoDB Search 연산자를 지원하지 않습니다.

  • MongoDB Vector Search는 $eq의 짧은 형식을 지원합니다. 짧은 형식에서는 쿼리 에 $eq 을(를) 지정할 필요가 없습니다.

    예를 들어, $eq가 포함된 다음 필터를 가정하겠습니다.

    "filter": { "_id": { "$eq": ObjectId("5a9427648b0beebeb69537a5") }

    이는 $eq의 짧은 형식을 사용하는 다음 필터와 동일합니다.

    "filter": { "_id": ObjectId("5a9427648b0beebeb69537a5") }
  • $and MQL 연산자 사용하여 단일 쿼리 에서 필터 배열 을 지정할 수 있습니다.

    예를 들어 genres 필드가 Action이고 year 필드가 1999, 2000 또는 2001인 문서에 대해 다음과 같은 사전 필터를 사용한다고 가정해 보겠습니다.

    "filter": {
    "$and": [
    { "genres": "Action" },
    { "year": { "$in": [ 1999, 2000, 2001 ] } }
    ]
    }
  • 퍼지 검색, 구문 일치, 위치 필터 및 기타 분석된 텍스트와 같은 고급 필터링 역량의 경우 단계에서 $search vectorSearch 연산자를 사용합니다.

벡터 검색 쿼리 처리 격리하려면 전용 검색 노드를 권장합니다. 전용 검색 노드에서 쿼리 성능이 향상될 수 있습니다. CPU가 높은 시스템은 더 많은 성능 향상을 제공할 수 있습니다. MongoDB Vector Search가 검색 노드에서 실행되면 MongoDB Vector Search는 데이터 세그먼트 전반에서 쿼리 실행을 병렬화합니다.

쿼리 처리 병렬화하면 대규모 데이터 세트에 대한 쿼리와 같은 대부분의 경우 응답 시간이 향상됩니다. MongoDB Vector Search 쿼리 처리 중에 쿼리 내 병렬 처리를 사용하면 더 많은 리소스를 사용하지만 각 개별 쿼리 의 지연 시간 향상됩니다.

참고

MongoDB Vector Search는 각 쿼리 동시에 실행 된다는 것을 보장하지 않습니다. 예시 들어, 너무 많은 동시 쿼리가 대기열에 추가되면 MongoDB Vector Search가 단일 스레드 실행으로 되돌아갈 수 있습니다.

동일한 노드 또는 다른 노드에서 동일한 연속 근사 최근접 이웃 검색 쿼리에 대해 일관되지 않은 결과가 표시될 수 있습니다. 이 문제를 완화하려면 $vectorSearch 쿼리에서 numCandidates 값을 늘리거나 인덱스 정의의 hnswOptions 내에서 구성 매개변수를 수정하는 것이 좋습니다. 그러나 근사 최근접 이웃 검색의 특성으로 인해 완전한 일관성 보장이 되지는 않습니다.

다음 쿼리는 샘플 sample_mflix.embedded_movies 를 검색합니다. $vectorSearch 단계를 사용하여 컬렉션 . 쿼리는 Voyage AI 의 voyage-3-large 임베딩 모델을 사용하여 생성된 임베딩이 포함된 plot_embedding_voyage_3_large 필드 검색 .

이 예시를 실행하기 전에 다음 작업을 수행하세요.

  • Atlas 클러스터에 샘플 컬렉션을 추가합니다.

  • 컬렉션 에 대한 MongoDB Vector Search 검색 인덱스를 생성합니다. 지침은 MongoDB 벡터 검색 인덱스 생성 절차 및 기본 예시 또는 필터 예시에 대한 구성을 원하는 언어로 복사하세요를 참조하세요.

참고

mongosh를 사용하는 경우 샘플 코드의 queryVector를 터미널에 붙여넣는 것은 컴퓨터에 따라 시간이 걸릴 수 있습니다.

다음 쿼리는 $vectorSearch 단계를 사용하여 문자열 시간 이동에 대한 벡터 임베딩을 사용하여 plot_embedding_voyage_3_large 필드를 검색합니다. 가장 가까운 이웃을 150개까지 고려하고, 결과에 10개의 문서를 반환합니다. 또한 다음 작업을 수행하기 위해 $project 단계를 지정합니다.

  • _id 필드를 제외하고 plottitle 필드만 결과에 포함합니다.

  • 결과의 각 문서에 대한 벡터 검색 점수를 보여주는 score 필드를 추가합니다.

다음 쿼리는 01 1955 ~ 01 1975 사이에 개봉한 영화의 문서를 필터링한 후 샘플 벡터 데이터에 대해 시맨틱 Atlas Search를 수행합니다. $and 연산자를 사용하여 지정된 날짜에 대한 논리적 AND 연산을 수행합니다. 그런 다음 필터링된 문서의 plot_embedding_voyage_3_large 필드에서 string 어린이 모험 에 대한 벡터 임베딩을 사용하여 150 가장 가까운 이웃을 검색하고 결과에 10 문서를 반환합니다. 이 쿼리는 또한 다음을 수행하는 $project 단계를 지정합니다.

  • _id 필드를 제외하고 결과에 plot, titleyear 필드만 포함합니다.

  • 결과에서 문서의 벡터 Atlas Search 점수를 표시하는 score 필드를 추가합니다.

MongoDB Vector Search는 1955 에서 1975 사이의 year 필드 값을 기준으로 문서를 필터링합니다. 1955 부터 1975 사이에 개봉된 영화의 줄거리에 나오는 어린이들의 모험을 요약한 문서를 반환합니다.

추가 필터 예시

Atlas Cluster의 데이터에 대해 시맨틱 검색을 수행하는 방법 자습서에서는 sample_mflix.embedded_movies 컬렉션에 포함된 데이터에 대한 시맨틱 검색 쿼리의 다른 사전 필터를 보여줍니다.

다음 쿼리는 $vectorSearch 단계를 사용하여 문자열 세계 대전에 대한 벡터 임베딩을 사용하여 plot_embedding_voyage_3_large 필드를 검색합니다. 정확히 일치하는 항목을 요청하고 결과를 10개 문서로 제한합니다. 또한 이 쿼리는 다음을 수행하기 위해 $project 단계를 지정합니다.

  • 결과에서 _id 필드를 제외하고 plot, title, year 필드만 포함합니다.

  • 결과에서 문서의 벡터 Atlas Search 점수를 표시하는 score 필드를 추가합니다.

돌아가기

인덱스 참조

스킬 배지 획득

무료로 '벡터 검색 기초'를 마스터하세요!

자세한 내용을 알아보세요.

이 페이지의 내용