문서 메뉴
문서 홈
/
MongoDB Atlas
/

Vector Search 쿼리 실행

이 페이지의 내용

  • 정의
  • 필드
  • 행동
  • Atlas Vector Search 인덱스
  • Atlas Vector Search 점수
  • Atlas Vector Search 사전 필터링
  • 제한 사항
  • 지원되는 클라이언트
  • 세그먼트 간 병렬 쿼리 실행
  • 예제

Atlas Vector Search 쿼리는 집계 파이프라인 단계 의 형태를 취합니다. $vectorSearch 쿼리의 경우 Atlas Vector Search는 시맨틱 검색 결과를 반환합니다.

단계는 $vectorSearch 지정된 필드의 벡터에 대해ANN 검색을 수행합니다. 검색하려는 필드는 vectorSearch 인덱스 유형 내에서 Atlas Vector Search vector 유형으로 인덱싱되어야 합니다.

$vectorSearch

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

{
"$vectorSearch": {
"index": "<index-name>",
"path": "<field-to-search>",
"queryVector": [<array-of-numbers>],
"numCandidates": <number-of-candidates>,
"limit": <number-of-results>,
"filter": {<filter-specification>}
}
}

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

필드
유형
필요성
설명
filter
문서
옵션

인덱싱된 필드를 부울, 숫자(소수점 제외) 또는 문자열과 비교하여 사전 필터로 사용하는 모든 MQL 일치 표현식입니다. 필터에서 다음 비교 쿼리집계 파이프라인 연산자 중 하나를 사용할 수 있습니다.

자세히 알아보려면 Atlas Vector Search 사전 필터를 참조하세요.

index
문자열
필수 사항

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

인덱스 이름의 철자가 틀렸거나 지정된 인덱스가 클러스터에 존재하지 않는 경우 Atlas Vector Search는 결과를 반환하지 않습니다.

limit
숫자
필수 사항
결과에서 반환할 문서 수(int 유형만 해당)입니다. 값은 numCandidates의 값을 초과할 수 없습니다.
numCandidates
숫자
필수 사항

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

지연 시간에 영향을 줄 수 있지만, 반환할 문서 수(limit)보다 큰 수를 지정하여 정확도를 높이는 것이 좋습니다. 예를 들어 문서 한 개로 제한하는 경우 가장 가까운 이웃의 비율을 10~20으로 설정하는 것이 좋습니다. 이러한 과다 요청 패턴은 ANN 검색에서 지연 시간과 리콜의 균형을 맞추는 데 권장되는 방법이며, 특정 데이터 세트에 맞게 조정하는 것이 좋습니다.

path
문자열
필수 사항
검색할 인덱스 vectorEmbedding 유형 필드입니다. 자세한 내용은 경로 구성을 참조하세요.
queryVector
숫자 배열
필수 사항

쿼리 벡터를 나타내는 BSON double 유형의 숫자 배열입니다. 배열 크기는 필드에 대한 인덱스 정의에 지정된 벡터 dimensions 의 수와 일치해야 합니다.

참고

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

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

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

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

  • 부울, 숫자 및 문자열 값을 필터 유형으로 포함하는 필드로, 사전 필터링된 데이터에서 벡터 검색을 사용할 수 있습니다.

이러한 Atlas Vector Search 필드 유형에 대해 자세히 알아보려면 벡터 검색을 위해 필드를 인덱싱하는 방법을 참조하세요.

Atlas Vector Search는 반환하는 모든 문서에만 0~1 사이의 고정된 범위의 점수를 할당합니다. cosinedotProduct 유사도의 경우, Atlas Vector Search는 다음 알고리즘을 사용하여 점수를 정규화합니다.

score = (1 + cosine/dot_product(v1,v2)) / 2

반환된 문서에 할당된 점수는 문서 메타데이터의 일부입니다. 반환된 각 문서의 점수를 결과 집합과 함께 포함하려면 집계 파이프라인에서 $project 단계를 사용합니다.

Atlas Vector Search 쿼리 결과의 점수를 조회하려면 $meta 표현식의 값으로 vectorSearchScore 를 사용합니다. 즉, $vectorSearch 단계 이후 $project 단계에서 score 필드는 $meta 표현식을 사용합니다. 벡터 검색을 위한 문서 점수를 반환하려면 표현식에 vectorSearchScore 값이 필요합니다.

예제

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])

참고

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

$vectorSearch filter 옵션은 BSON 부울, 문자열 및 숫자 값만 일치합니다. 데이터를 필터링하려는 필드를 vectorSearch 유형 인덱스 정의의 필터 유형으로 인덱싱 해야 합니다. 데이터 필터링은 시맨틱 검색의 범위를 좁히고 모든 벡터가 비교 대상으로 고려되지 않도록 하는 데 유용합니다.

$vectorSearch filter 옵션은 다음 비교 쿼리 연산자만 지원합니다.

  • $gt

  • $lt

  • $gte

  • $lte

  • $eq

    참고

    Atlas Vector Search는 $eq의 짧은 형식도 지원합니다. 짧은 형식에서는 쿼리에 $eq를 지정할 필요가 없습니다. 예를 들어 다음 $eq 쿼리를 생각해보겠습니다.

    { "genres": { "$eq": "Comedy" } }

    $eq의 짧은 형식과 다음 방법을 사용하여 앞의 쿼리를 실행할 수 있습니다.

    { "genres": "Comedy" }
  • $ne

  • $in

  • $nin

단일 값만 일치하며 값 배열은 지원하지 않습니다.

$vectorSearch filter 옵션은 다음 집계 파이프라인 연산자만 지원합니다.

참고

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

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

  • v6.0.11

  • v7.0.2 이상(RC 포함)

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

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

Atlas , mongosh 및 다음 $vectorSearch드라이버를 사용하여 쿼리를 실행할 수 있습니다.Data Explorer

Atlas CLI로 생성한 로컬 Atlas 배포와 함께 Atlas Vector Search를 사용할 수도 있습니다. 자세히 알아보려면 로컬 Atlas 배포 만들기를 참조하세요.

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

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

참고

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

다음 쿼리는 $vectorSearch 단계를 사용하여 샘플 sample_mflix.embedded_movies 컬렉션을 검색합니다. 쿼리는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함된 plot_embedding 필드를 검색합니다. 샘플 컬렉션 을 Atlas 클러스터에 추가하고 컬렉션에 대한 샘플 인덱스 를 만든 경우, 컬렉션에 대해 다음 쿼리를 실행할 수 있습니다.


언어 선택 드롭다운 메뉴를 사용하여 이 페이지에 있는 예제의 언어를 설정합니다.


← Atlas Vector Search 인덱스 편집