하이브리드 검색은 동일하거나 유사한 쿼리 기준에 대해 서로 다른 검색 방식 또는 검색 쿼리를 결합한 것입니다. 이 기법은 알고리즘을 사용하여 결과를 순위화하고, 다양한 검색 방법의 결과를 통합하여 반환합니다. $rankFusion을 사용하여 하이브리드 검색을 수행할 수 있습니다.
상호 순위 결합 소개
상호 순위 융합은 서로 다른 검색 방법의 결과를 다음 작업을 통해 단일 결과 집합으로 결합하는 기술입니다.
결과에서 문서의 상호 순위를 계산합니다.
각 검색 결과에서 순위가 매겨진 각 문서에 대해 먼저 그 문서의 순위(
r)에 상수60을 더합니다. 이때 상수는 점수 평활화를 위한 값(rank_constant)입니다. 그리고r과rank_constant의 합으로1을 나눕니다. 이렇게 계산하여 결과 내 해당 문서의 역순위 값을 구합니다.rank_constant의 값을 설정할 수 없으며 기본값은60입니다.reciprocal_rank = 1 / ( r + rank_constant ) 각 검색 방법에 대해 서로 다른 가중치(
w)를 적용하여 해당 검색 방법에 더 많은 중요성을 부여합니다. 각 문서에 대해 가중치가 적용된 상호 순위는 가중치에 문서의 상호 순위를 곱하여 계산됩니다.weighted_reciprocal_rank = w x reciprocal_rank 결과에서 문서의 순위 도출 점수 및 가중치 점수를 결합합니다.
모든 검색 결과의 각 문서에 해당 문서의 단일 점수에 대해 계산된 상호 순위를 추가합니다.
결과에 있는 문서의 합산 점수를 기준으로 결과를 정렬합니다.
결과 내 문서를 단일, 통합된 순위 목록으로 정렬하기 위해 결과 전반에 걸쳐 결합된 점수를 기준으로 문서를 정렬합니다.
다양한 하이브리드 검색 사용 사례
MongoDB Vector Search를 활용하여 여러 유형의 하이브리드 검색 수행할 수 있습니다. 구체적으로 MongoDB Vector Search는 다음 사용 사례를 지원합니다.
단일 쿼리 에서 전체 텍스트 및 벡터 검색 : 시맨틱 및 전체 텍스트 검색 과 같은 다양한 검색 방법의 결과를 결합할 수 있습니다. 시맨틱
$vectorSearch$search검색 에는 을,전체 텍스트 검색 결과에는 를 사용할 수 있으며, 상호 순위 통합 기술을 사용하여 결과를 결합할 수 있습니다. 자세한 학습 은 네임스페이스 에 대해 시맨틱 검색 및 전체 텍스트 검색 수행하고sample_mflix.embedded_movies역순위 통합을 사용하여 결합된 순위 결과를 조회 방법을 보여주는 MongoDB Vector Search 및 MongoDB Search를 사용한 하이브리드 검색 수행 튜토리얼을 참조하세요.또는 결과의 상대적 순서 외에도 점수가 중요한 보다 세분화된 하이브리드 검색 의 경우
$scoreFusion파이프라인 단계를 사용할 수 있습니다. 자세한 학습 은 네임스페이스 에 대해 시맨틱 검색 및sample_mflix.embedded_movies전체 텍스트 검색 수행하고 입력 파이프라인 결과를 최종 점수 결과 설정하다 로 조회 방법을 보여주는 MongoDB Vector Search 및 MongoDB Search를 사용한 하이브리드 검색 수행 튜토리얼을 참조하세요.$rankFusion는 상호 순위 통합 알고리즘 사용하여 입력 파이프라인에서 위치(상대적 순위)에 따라 문서의 순위를 매기는 반면,$scoreFusion는 결과를 결합하는 수학적 표현식을 사용하여 입력 파이프라인에서 할당한 점수를 기준으로 문서의 순위를 매깁니다.$rankFusion에서 순위는 파이프라인 가중치의 영향을 받습니다.$scoreFusion에서 가중치는 최종 결과에 대한 각 파이프라인 점수의 기여도를 제어합니다.단일 쿼리에서 여러 벡터 검색 쿼리 실행: MongoDB
$rankFusion파이프라인은 동일한 컬렉션에 대해 실행되는 벡터 검색 쿼리를 포함한 여러 하위 파이프라인을 지원하며 상호 순위 융합 기법으로 결과를 통합합니다. 여러$vectorSearch쿼리를 결합하는 방법 튜토리얼에서는 다음과 같은 유형의 벡터 검색을 다룹니다.동일한 쿼리 내에서 의미상 유사한 텀을 데이터셋 전체에 걸쳐 포괄적으로 검색합니다.
데이터셋 내 여러 필드를 검색하여, 쿼리에 가장 적합한 결과를 반환하는 필드를 확인할 수 있습니다.
서로 다른 임베딩 모델에서 생성된 임베딩을 사용하여 검색하고, 각 모델 간의 의미 해석 차이를 확인할 수 있습니다.
고려 사항
하이브리드 검색 에 $rankFusion 또는 $scoreFusion 파이프라인 단계를 사용하는 경우 다음 사항을 고려하세요.
분리된 결과 집합
하나의 검색 방식이 놓친 오탐을 포착하려면 개별 하위 파이프라인에서 분리된 결과를 사용하는 것이 바람직할 수도 있습니다. 결과가 분리된 경우 대부분 또는 모든 결과가 한 파이프라인에서 반환된 것처럼 보일 수 있으며, 다른 파이프라인에서는 반환되지 않을 수 있습니다. 그러나 모든 하위 파이프라인이 유사한 결과를 반환하게 하려면 하위 파이프라인당 결과 수를 늘려 보세요.
가중치
모든 쿼리에 대해 고정된 가중치를 사용하는 대신, 쿼리별로 텍스트(lexical) 쿼리와 벡터 쿼리에 가중치를 두는 것을 권장합니다. 이렇게 하면 각 쿼리에 대한 결과의 관련성을 향상시킬 수 있습니다. 이렇게 하면 가장 많은 자원이 필요한 쿼리에 리소스를 할당할 수 있어 계산 리소스 활용도도 높아집니다.
여러 집계 파이프라인
$rankFusion 또는 $scoreFusion 단계에서 임의의 수의 하위 파이프라인을 함께 결합할 수 있지만 모두 동일한 컬렉션 에 대해 실행되어야 합니다. $rankFusion 또는 $scoreFusion 단계를 사용하여 컬렉션 전체를 검색 할 수 없습니다. 컬렉션 간 검색 $unionWith 위해 단계를 와 함께 사용합니다.$vectorSearch
비검색 파이프라인
별도의 검색 파이프라인 없이도 컬렉션 내 특정 필드를 강화하려면, 파이프라인에서 $match 또는 $sort 등의 단계를 사용하는 것을 권장합니다.
지리적 관련성
또는 단계 $geoNear $search 내에서 지리적 위치 검색 위해 내에서 및 근거리 연산자 $rankFusion $scoreFusion 사용할 수 있습니다. 그러나 $geoNear 와 근거리 연산자는 서로 다른 좌표 참조 프레임을 사용합니다. 따라서 결과 서수와 점수가 동일하지 않을 수 있습니다.
결과 제한
각 하위 파이프라인별로 반환할 결과 수에 제한을 두는 것이 좋습니다.
제한 사항
$rankFusion 및 $scoreFusion를 사용하는 하이브리드 검색 에는 다음과 같은 제한 사항이 적용 .
$rankFusionMongoDB 8.0 이상에서만 지원됩니다(자동 업그레이드가 포함된 최신 버전 포함).참고
8.0.X 버전에서
$rankFusion를 사용하려면 지원 사례 를 제출해야 합니다. 8.0에서 업그레이드 경우$rankFusion쿼리 실행을 일시 중지해야 할 수 있습니다.$rankFusion및$scoreFusion하위 파이프라인에는 다음 단계만 포함될 수 있습니다.$rankFusion$scoreFusion각 하위 파이프라인에 대해 원본 입력 문서 로 다시 추적 가능한 링크를 유지합니다. 따라서 다음은 지원 하지 않습니다.$project단계storedSource 필드
$rankFusion및$scoreFusion하위 파이프라인이 병렬이 아닌 직렬로 실행 .$rankFusion$scoreFusion은(는) 페이지 지원 하지 않습니다.rankFusionMongoDB 8.0 이상을 실행 클러스터의 뷰 에서만 실행 수 있습니다. 뷰 정의 또는 time series 컬렉션 에서는rankFusion를 실행 수 없습니다.
전제 조건
이 튜토리얼을 시도하려면 다음이 필요합니다.
MongoDB 버전 v8.0 이상을 사용하는 클러스터 .
클러스터에 로드된 sample_mflix 데이터베이스.
mongosh클러스터 에서 쿼리를 시도합니다.참고
Atlas CLI 사용하여 생성한 로컬 Atlas 배포 및 자체 관리( 온프레미스 ) 배포에서 이러한 하이브리드 검색 사용 사례를 시도할 수도 있습니다. 자세히 학습 로컬 Atlas 배포 만들기를 참조하세요.