정의
$vectorSearch 단계는 MongoDB 벡터 검색 쿼리 결과로 각 스트리밍 문서를 보강합니다. 각 입력 문서에 대해 이 단계는 컬렉션에 대해 $vectorSearch 쿼리를 실행하고 지정한 필드에 결과를 추가합니다.
배치
$vectorSearch 파이프라인의 중간 단계여야 합니다. 파이프라인의 $source 또는 싱크로 사용하지 마십시오.
구문
$vectorSearch 파이프라인 단계의 프로토타입 형식은 다음과 같습니다.
{ "$vectorSearch": { "from": { "connectionName": "<registered-atlas-connection>", "db": "<database>", "coll": "<collection>" }, "as": "<output-field>", "queryVector": [<number>, ...] | <expression>, "query": { "text": "<string>" | <expression> }, "model": "<embedding-model>", "index": "<vector-index-name>", "path": "<field-containing-vectors>", "numCandidates": <int>, "limit": <int>, "filter": { ... }, "exact": <bool>, "searchNodePreference": { "key": "<preference>" }, "pipeline": [ { $<aggregation-stage>: { ... } }, ... ], "let": { "<variable>": <expression>, . . . } } }
$vectorSearch 단계에서는 다음 필드가 있는 문서를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
|---|---|---|---|
| 문서 | 필수 사항 | 각 입력 문서에 대해 |
| 문자열 | 필수 사항 | 연결 레지스트리에 있는 Atlas 연결 이름입니다. Atlas Stream Processing은 파스 시간에 다른 연결 유형을 거부합니다. |
| 리터럴 string | 필수 사항 | 대상 데이터베이스의 이름입니다. |
| 리터럴 string | 필수 사항 | MongoDB 벡터 검색 인덱스가 포함된 대상 컬렉션의 이름입니다. |
| 문자열 | 필수 사항 | 검색 결과 배열을 위한 스트리밍 문서의 출력 필드입니다. MongoDB 벡터 검색이 일치하는 문서를 반환하지 않으면 Atlas Stream Processing은 이 필드를 빈 배열로 설정합니다. 경고: 이 필드가 비어 있거나 스트림 메타데이터 필드 이름과 충돌되면 Atlas Stream Processing은 시작 시간에 |
| 배열 | 필드 경로 표현식 | 조건부 | 일치하는 문서를 검색 위한 명시적 벡터 임베딩입니다. |
| 문서 | 조건부 | 자동 임베딩을 위한 텍스트 쿼리 지정하는 문서입니다. |
| string | 필드 경로 표현식 | 조건부 | 자동 임베딩에 사용할 쿼리 텍스트. |
| 문자열 | 옵션 |
|
| 문자열 | 필수 사항 | 쿼리할 MongoDB Vector Search 인덱스의 이름입니다. |
| 문자열 | 필수 사항 | 검색할 벡터 임베딩이 포함된 대상 컬렉션의 필드입니다. |
| int | 조건부 | MongoDB Vector Search가 검색 중에 고려하는 후보의 수입니다. |
| int | 필수 사항 | 반환할 최대 결과 수입니다. 경고: |
| 문서 | 옵션 | 벡터 검색 전에 적용 할 사전 필터 표현식 . 지원되는 연산자는 필터를 참조하세요. 경고: |
| 부울 | 옵션 | ANN 또는 ENN 검색 실행 할지 여부를 지정하는 플래그입니다. 값은 다음 중 하나일 수 있습니다.
기본값은 |
| 문서 | 옵션 | Atlas Stream Processing이 특정 검색 노드로 쿼리를 라우팅하는 데 사용하는 |
| 배열 | 옵션 | Atlas Stream Processing이 검색 결과를 입력 문서에 첨부하기 전에 실행하는 추가 집계 단계입니다. |
| 문서 | 옵션 |
행동
쿼리 모드
$vectorSearch 벡터 임베딩을 위한 queryVector 및 자동 임베딩을 위한 query.text라는 상호 배타적인 두 가지 쿼리 모드를 지원합니다. 두 모드 모두 리터럴 값이나 필드 경로 표현식 지정하여 단일 스트림 프로세서가 각 입력 문서 에 대해 서로 다른 쿼리 실행할 수 있습니다.
Error Handling
대상 MongoDB 벡터 검색 인덱스가 존재하지 않으면 $vectorSearch이 처음 실행될 때 스트림 프로세서가 오류 상태에 진입합니다. Atlas Stream Processing은 MongoServerError 오류를 보고하고 문서 처리를 중지합니다.
런타임에 queryVector 또는 query.text이 잘못된 유형으로 평가되는 경우, Atlas Stream Processing 은 문제가 되는 문서 만 데드 레터 큐( 구성된 경우)로 라우팅하고, 그렇지 않으면 삭제합니다.스트림 프로세서는 이후 문서를 계속 프로세스 . DLQ 문서 스키마 에 대해서는 데드 레터 대기열을 참조하세요.
결과 처리
Atlas Stream Processing이 검색 결과를 입력 문서에 첨부하기 전에 pipeline을 사용하여 검색 결과를 추가 처리합니다. Atlas Stream Processing은 pipeline을 MongoDB Vector Search로 그대로 전송합니다. pipeline 내의 입력 문서에서 값을 참조하려면 let을 통해 전달하고 $$<variable>로 참조합니다.
예시
다음 예시에서는 영화 및 영화관 관련 데이터가 포함된 sample_mflix 데이터 세트를 쿼리 . 이를 실행 하려면 샘플 데이터를 Atlas cluster 에 로드하고 embedded_movies 컬렉션 에 MongoDB Vector Search 인덱스 생성합니다.