뷰 에서 MongoDB Vector Search 인덱스 생성하여 문서 및 컬렉션을 변환하여 컬렉션 부분적으로 인덱스, 호환되지 않는 데이터 유형 또는 데이터 모델 등을 지원 등의 작업을 수행할 수 있습니다.
다음 예제에서는 sample_mflix 샘플 데이터베이스 사용합니다.
참고
명확화
이 페이지에서는 표준 보기에 대해 설명합니다. 온디맨드 구체화된 보기에 대한 자세한 내용은 온디맨드 구체화 보기를 참조하세요.
보기 유형 간의 차이점에 대해 알아보려면 온디맨드 구체화 보기의 비교를 참조하세요.
요구 사항:
MongoDB 8.0 이상을 사용해야 합니다.
MongoDB v8.0 이상:
Atlas UI 또는 Atlas 관리 API 사용하여 View에 MongoDB Vector Search 인덱스를 생성합니다.
소스 컬렉션 에 대해 MongoDB Vector Search 쿼리를 실행합니다. 뷰에서 생성된 MongoDB Vector Search 인덱스 참조합니다. 이러한 쿼리는 소스 컬렉션 에 나타나는 원본 문서를 반환합니다.
MongoDB v8.1 이상에서는 추가로 다음을 수행할 수 있습니다.
mongosh및 드라이버 메서드인db.collection.createSearchIndex(),db.collection.updateSearchIndex(),db.collection.dropSearchIndex()및$listSearchIndexes를 사용하여 뷰에서 MongoDB Vector Search 인덱스를 생성하고 관리 .뷰에 대해 MongoDB Vector Search 쿼리를 실행합니다.
제한 사항
MongoDB Vector Search는 다음 단계에서 뷰를 지원합니다.
인덱스 이름은 소스 컬렉션과 모든 보기에서 고유해야 합니다.
MongoDB Vector Search는 $$USER_ROLES 시스템 변수 및
$rand집계 연산자 와 같이 동적 결과를 생성하는 연산자가 있는 뷰 정의를 지원 하지 않습니다.MongoDB Vector Search 쿼리는 소스 컬렉션 에 나타나는 원본 문서를 반환합니다.
예시: 문서 필터링
보기를 생성하려면 createCollection 권한이 필요합니다.
문서를 필터링하여 컬렉션을 부분적으로 인덱싱할 수 있습니다. 다음 예시는 sample_mflix.embedded_movies 컬렉션에 벡터 임베딩 필드가 있는 문서만 인덱싱되도록 보기를 생성합니다.
성능 고려 사항
매우 복잡한 뷰 변환은 인덱싱 및 쿼리 시간을 증가시킬 수 있습니다. 이는 mongod 가 인덱싱 중에 oplog 항목을 필터링하고 변환할 때( 초기 동기화 및 정상 상태 복제), 그리고 쿼리 시점에 반환된 문서에 이러한 변환을 적용할 때 뷰 정의를 읽어야 하기 때문입니다.
Atlas 에서 예비 복제 로드를 방지하려면 구체화된 뷰 를 생성하는 것이 좋습니다. 소스 컬렉션 직접 쿼리 뷰 변환으로 인한 쿼리 지연 시간 방지할 수도 있습니다.
문제 해결
인덱스 변경 사항 FAILED
다음 시나리오에서는 인덱스 상태가 FAILED로 변경됩니다.
View에 MongoDB Vector Search와 호환되지 않는 인덱스 생성합니다.
MongoDB Vector Search 호환성 요구 사항을 충족하지 않는 방식으로 뷰를 편집합니다.
보기의 소스 컬렉션을 제거하거나 변경한 경우
예를 들어 하나의 보기가 다른 보기를 기반으로 생성되었고 그 상위 보기 소스를 다른 컬렉션으로 변경하는 경우입니다.
참고
이 제한은 뷰가 다른 뷰의 하위인 경우에도 적용됩니다. 예를 들어, 모든 하위 항목의 출처가 되는 소스 컬렉션을 변경하거나 제거할 수 없습니다.
인덱스 변경 사항 STALE
다음 시나리오에서는 인덱스 상태가 STALE로 변경됩니다.
경고
뷰에 정의된 집계 파이프라인이 컬렉션의 문서와 호환되지 않으면 검색 복제가 실패합니다. 예를 들어, 배열이 포함된 문서 필드에서 $toDouble 표현식이 작동하는 경우 복제가 실패합니다. 뷰가 컬렉션의 모든 문서에서 오류 없이 작동하는지 확인하세요.
인덱스
READY인 동안 뷰 정의로 인해 집계 실패가 발생하면 인덱스STALE이(가) 됩니다. 문서 확인하거나 더 이상 실패하지 않도록 뷰 정의를 변경한 후에는 인덱스READY(으)로 돌아갑니다.STALE인 경우 인덱스 쿼리 가능한 상태로 유지됩니다. 인덱스 oplog에서 떨어지면 인덱스 재작성이 트리거됩니다.인덱스가
BUILDING일 때 뷰 정의가 집계 파이프라인 오류를 일으키면 문서를 수정할 때까지 인덱스 생성이 중단됩니다. 문서를 해결하거나 뷰 정의를 변경하여 더 이상 실패하지 않도록 하면 인덱스가READY로 돌아갑니다.
Atlas UI 의 인덱스 상태 세부 정보 페이지에서 인덱스 상태를 확인할 수 있습니다.
오류: $search 은(는) 파이프라인의 첫 번째 단계로만 유효합니다
이 오류는 8.1 이전 MongoDB 버전을 사용하여 뷰를 쿼리 때 나타납니다.
8.0 이전 MongoDB 버전을 사용하는 경우 8.1+로 업그레이드 뷰를 직접 쿼리 것이 좋습니다. 8.0 으로 업그레이드 소스 컬렉션 쿼리 할 수 있습니다.
MongoDB 8.0을 사용하는 경우 소스 컬렉션 에 대해 뷰 인덱스 쿼리 해야 합니다. 예시 를 들어 보기 대신 컬렉션 에서
.aggregate()를 실행 .
인덱스 프로세스
뷰에서 MongoDB Vector Search 인덱스 생성하면 mongot 프로세스 일반 컬렉션 에서 MongoDB Vector Search 인덱스 생성할 때와 동일한 작업을 수행합니다. mongot 프로세스:
컬렉션 에 대한 인덱스 정의의 규칙을 기반으로 MongoDB Vector Search 인덱스를 생성합니다.
MongoDB Vector Search 인덱스를 정의한 컬렉션의 문서 및 인덱스의 현재 상태 에 대한 변경 스트림을 모니터링합니다.
MongoDB Vector Search 쿼리를 처리하고 일치하는 문서에 대한 문서 ID 및 기타 검색 메타데이터
mongod로 반환한 다음, 가 전체 문서 조회를 수행하고 결과를 클라이언트 에 반환합니다.
View에 MongoDB 벡터 검색 인덱스를 만들면 1 및 2 단계에서 View 정의가 적용되고, 검색 인덱스 정의를 기반으로 변환된 문서가 인덱싱된 다음 디스크에 저장됩니다.
자세히 알아보기
뷰에 대한 자세한 내용은 뷰를 참조하세요.
뷰에 MongoDB Search 인덱스 만들려면 MongoDB Search에서 뷰 사용을 참조하세요.