Vector Search 쿼리 실행
이 페이지의 내용
Atlas Vector Search 쿼리는 집계 파이프라인 단계 의 형태를 취합니다. $vectorSearch
쿼리의 경우 Atlas Vector Search는 시맨틱 검색 결과를 반환합니다.
정의
단계는 $vectorSearch
지정된 필드의 벡터에 대해ANN 검색을 수행합니다. 검색하려는 필드는 vectorSearch 인덱스 유형 내에서 Atlas Vector Search vector 유형으로 인덱싱되어야 합니다.
필드
$vectorSearch
단계에서는 다음 필드가 있는 문서를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
---|---|---|---|
filter | 문서 | 옵션 | |
index | 문자열 | 필수 사항 | 사용할 Atlas Vector Search 인덱스의 이름입니다. 인덱스 이름의 철자가 틀렸거나 지정된 인덱스가 클러스터에 존재하지 않는 경우 Atlas Vector Search는 결과를 반환하지 않습니다. |
limit | 숫자 | 필수 사항 | 결과에서 반환할 문서 수( int 유형만 해당)입니다. 값은 numCandidates 의 값을 초과할 수 없습니다. |
numCandidates | 숫자 | 필수 사항 | 검색 중에 사용할 가장 가까운 이웃의 수입니다. 값은 ( 지연 시간에 영향을 줄 수 있지만, 반환할 문서 수( |
path | 문자열 | 필수 사항 | 검색할 인덱스 vectorEmbedding 유형 필드입니다. 자세한 내용은 경로 구성을 참조하세요. |
queryVector | 숫자 배열 | 필수 사항 | 쿼리 벡터를 나타내는 BSON 참고데이터를 임베드할 때 사용한 것과 동일한 모델을 사용하여 쿼리를 임베드해야 합니다. |
행동
$vectorSearch
표시되는 파이프라인의 첫 번째 단계에 있어야 합니다.
Atlas Vector Search 인덱스
vectorSearch 유형 인덱스 $vectorSearch
정의 내의 단계를 사용하여 검색할 필드를 인덱싱해야 합니다. Atlas Vector Search vectorSearch 유형 인덱스 정의에서 다음 유형의 필드를 인덱싱할 수 있습니다.
이러한 Atlas Vector Search 필드 유형에 대해 자세히 알아보려면 벡터 검색을 위해 필드를 인덱싱하는 방법을 참조하세요.
Atlas Vector Search 점수
Atlas Vector Search는 반환하는 모든 문서에만 0
~1
사이의 고정된 범위의 점수를 할당합니다. cosine
및 dotProduct
유사도의 경우, Atlas Vector Search는 다음 알고리즘을 사용하여 점수를 정규화합니다.
score = (1 + cosine/dot_product(v1,v2)) / 2
반환된 문서에 할당된 점수는 문서 메타데이터의 일부입니다. 반환된 각 문서의 점수를 결과 집합과 함께 포함하려면 집계 파이프라인에서 $project
단계를 사용합니다.
Atlas Vector Search 쿼리 결과의 점수를 조회하려면 $meta 표현식의 값으로 vectorSearchScore
를 사용합니다. 즉, $vectorSearch
단계 이후 $project
단계에서 score
필드는 $meta 표현식을 사용합니다. 벡터 검색을 위한 문서 점수를 반환하려면 표현식에 vectorSearchScore
값이 필요합니다.
예제
1 db.<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
을 사용하여 반환하는 점수에는 영향을 주지 않습니다.
Atlas Vector Search 사전 필터링
$vectorSearch
filter
옵션은 BSON 부울, 문자열 및 숫자 값만 일치합니다. 데이터를 필터링하려는 필드를 vectorSearch 유형 인덱스 정의의 필터 유형으로 인덱싱 해야 합니다. 데이터 필터링은 시맨틱 검색의 범위를 좁히고 모든 벡터가 비교 대상으로 고려되지 않도록 하는 데 유용합니다.
$vectorSearch
filter
옵션은 다음 비교 쿼리 연산자만 지원합니다.
참고
Atlas Vector Search는
$eq
의 짧은 형식도 지원합니다. 짧은 형식에서는 쿼리에$eq
를 지정할 필요가 없습니다. 예를 들어 다음$eq
쿼리를 생각해보겠습니다.{ "genres": { "$eq": "Comedy" } } $eq
의 짧은 형식과 다음 방법을 사용하여 앞의 쿼리를 실행할 수 있습니다.{ "genres": "Comedy" }
단일 값만 일치하며 값 배열은 지원하지 않습니다.
$vectorSearch
filter
옵션은 다음 집계 파이프라인 연산자만 지원합니다.
참고
$vectorSearch
filter
옵션은 다른 비교 쿼리 및 집계 파이프라인 연산자를 지원하지 않습니다.
제한 사항
$vectorSearch
다음 MongoDB 버전을 실행하는 Atlas cluster에서만 지원됩니다.
v6.0.11
v7.0.2 이상(RC 포함)
$vectorSearch
는 뷰 정의 및 다음 파이프라인 단계에서 사용할 수 없습니다.
$lookup
하위 파이프라인$unionWith
하위 파이프라인$facet
파이프라인 단계
$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 클러스터에 추가하고 컬렉션에 대한 샘플 인덱스 를 만든 경우, 컬렉션에 대해 다음 쿼리를 실행할 수 있습니다.
➤ 언어 선택 드롭다운 메뉴를 사용하여 이 페이지에 있는 예제의 언어를 설정합니다.