A hybrid search is an aggregation of different search methods or search queries for the same or similar query criteria. This technique uses algorithms to rank results and return unified results from the different methods of search. You can use $rankFusion and $scoreFusion to perform a hybrid search.
상호 순위 결합 소개
상호 순위 융합은 서로 다른 검색 방법의 결과를 다음 작업을 통해 단일 결과 집합으로 결합하는 기술입니다.
결과에서 문서의 상호 순위를 계산합니다.
각 검색 결과에서 순위가 매겨진 각 문서에 대해 먼저 그 문서의 순위(
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 결과에서 문서의 순위 도출 점수 및 가중치 점수를 결합합니다.
모든 검색 결과의 각 문서에 해당 문서의 단일 점수에 대해 계산된 상호 순위를 추가합니다.
결과에 있는 문서의 합산 점수를 기준으로 결과를 정렬합니다.
결과 내 문서를 단일, 통합된 순위 목록으로 정렬하기 위해 결과 전반에 걸쳐 결합된 점수를 기준으로 문서를 정렬합니다.
상대 점수 합치란 무엇입니까?
Relative score fusion is a technique to combine results from different search methods into a single result set by using the actual relevance scores from each pipeline — rather than the rank position of documents. This gives fine-grained control over how scores from different retrieval methods are normalized, weighted, and merged. You can use $scoreFusion to perform hybrid search using relative score fusion.
상대 점수 합치는 다음 조치를 수행하여 결과를 결합합니다.
- 각 파이프라인의 점수를 정규화합니다.
각 파이프라인의 결과의 각 문서에 대해 정규화 매개변수를 사용하여 원시 점수를 공통 확장으로 정규화합니다. 검색 방법에 따라 점수 확장이 상당히 다르다. 예를 들어 벡터 검색 점수는 일반적으로
0에서1사이이지만, 전체 텍스트 BM25 점수는 훨씬 높은 범위에 있을 수 있습니다. 정규화는 다른 파이프라인의 점수를 결합하기 전에 비교 가능한 확장으로 가져옵니다. 세 가지 정규화 방법이 지원됩니다.none— 점수는 정규화 없이 그대로 결합됩니다. 모든 파이프라인이 이미 비교 가능한 확장에 대해 점수를 생성하는 경우 사용합니다.sigmoid— 결과 세트의 다른 점수 분포를 고려하지 않고 각 점수에 시그모이드 함수를 적용하여 점수를 범위(0, 1)로 매핑합니다.normalized_score = 1 / (1 + e⁻ˢ) minMaxScaler— 결과 세트에서 관찰된 최소 및 최대 점수를 사용하여 최소-최대 확장을 적용하고 최하 점수를0에, 최대 점수를1에 매핑합니다.normalized_score = (s - min_s) / (max_s - min_s)
- 각 파이프라인의 정규화된 점수에 가중치를 적용합니다.
각 파이프라인에 대해 각 문서의 정규화된 점수에 파이프라인의 가중치
w를 곱합니다. 가중치를 지정하지 않으면 기본값은1입니다. 가중치를 사용하여 특정 검색 방법에 다른 검색 방법보다 더 많은 중요성을 부여할 수 있습니다.weighted_score = w x normalized_score - 각 문서의 가중치를 결합합니다.
- 모든 검색 결과에 걸쳐 나타나는 각 문서에 대해 해당 문서가 나타난 모든 파이프라인에서 가중치를 결합합니다. 기본값 결합 방법은 가중치를 평균하는
avg입니다. 표현식을 사용하여 사용자 지정 결합 노리를 정의합니다. - 합산 점수를 기준으로 결과를 정렬합니다.
- 모든 파이프라인에 걸쳐 결합된 점수를 기준으로 결과의 모든 문서를 정렬하여 단일의 통합된 순위 목록을 생성합니다.
다양한 하이브리드 검색 사용 사례
MongoDB 벡터 검색을 사용하여 여러 유형의 하이브리드 검색을 수행할 수 있습니다. 구체적으로 MongoDB 벡터 검색은 다음 사용 사례를 지원합니다.
Full-text and vector search in a single query: You can combine results from different search methods, such as a semantic and a full-text search. You can use the
$vectorSearchfor the semantic search and the$searchfor the full-text search results and combine the results by using the reciprocal rank fusion technique. To learn more, see the Perform Hybrid Vector and Full-Text Search tutorial, which demonstrates how to perform a semantic search and full-text search against thesample_mflix.embedded_moviesnamespace and retrieve combined ranked results by using reciprocal rank fusion.또는 결과의 상대적 순서 외에도 점수가 중요한 더 세분화된 하이브리드 검색의 경우
$scoreFusion파이프라인 단계를 사용할 수 있습니다. 자세한 학습은 하이브리드 벡터 및 전체 텍스트 검색 수행 튜토리얼을 참조하세요. 이 튜토리얼에서는sample_mflix.embedded_movies네임스페이스에 대해 시맨틱 검색 및 전체 텍스트 검색을 수행하고 입력 파이프라인 결과를 최종 점수 결과 설정으로 조회하는 방법을 보여줍니다.$rankFusion는 상호 순위 통합 알고리즘 사용하여 입력 파이프라인에서 위치(상대적 순위)에 따라 문서의 순위를 매기는 반면,$scoreFusion는 결과를 결합하는 수학적 표현식을 사용하여 입력 파이프라인에서 할당한 점수를 기준으로 문서의 순위를 매깁니다.$rankFusion에서 순위는 파이프라인 가중치의 영향을 받습니다.$scoreFusion에서 가중치는 최종 결과에 대한 각 파이프라인 점수의 기여도를 제어합니다.또한 쿼리의 유인성에 따라 결과의 문서 순서를 재조정하려면
$rankFusion또는$scoreFusion단계 다음에$rerank단계를 사용할 수 있습니다. 자세히 알아보려면$rerank집계 파이프라인 단계를 참조하세요.단일 쿼리에서 여러 벡터 검색 쿼리 실행: MongoDB
$rankFusion파이프라인은 동일한 컬렉션에 대해 실행되는 벡터 검색 쿼리를 포함한 여러 하위 파이프라인을 지원하며 상호 순위 융합 기법으로 결과를 통합합니다. 여러$vectorSearch쿼리를 결합하는 방법 튜토리얼에서는 다음과 같은 유형의 벡터 검색을 다룹니다.동일한 쿼리 내에서 의미상 유사한 텀을 데이터셋 전체에 걸쳐 포괄적으로 검색합니다.
데이터셋 내 여러 필드를 검색하여, 쿼리에 가장 적합한 결과를 반환하는 필드를 확인할 수 있습니다.
서로 다른 임베딩 모델에서 생성된 임베딩을 사용하여 검색하고, 각 모델 간의 의미 해석 차이를 확인할 수 있습니다.
고려 사항
하이브리드 검색 에 $rankFusion 또는 $scoreFusion 파이프라인 단계를 사용하는 경우 다음 사항을 고려하세요.
분리된 결과 집합
하나의 검색 방식이 놓친 오탐을 포착하려면 개별 하위 파이프라인에서 분리된 결과를 사용하는 것이 바람직할 수도 있습니다. 결과가 분리된 경우 대부분 또는 모든 결과가 하나의 파이프라인에서 반환된 것처럼 보일 수 있으며, 다른 파이프라인에서는 반환되지 않을 수 있습니다. 그러나 모든 하위 파이프라인이 유사한 결과를 반환하게 하려면 하위 파이프라인당 결과 수를 늘려 보세요.
가중치
MongoDB는 모든 쿼리에 대해 정적 가중치를 사용하는 대신 쿼리별로 텍스트 및 벡터 쿼리에 가중치를 두는 것을 권장합니다. 이렇게 하면 각 쿼리에 대한 결과의 관련성을 향상시킬 수 있습니다. 이렇게 하면 가장 많은 자원이 필요한 쿼리에 리소스를 할당할 수 있어 계산 리소스 활용도 향상됩니다.
여러 집계 파이프라인
You can combine an arbitrary number of sub-pipelines together in the $rankFusion or $scoreFusion stage, but they must all execute against the same collection. You cannot use the $rankFusion or $scoreFusion stage to search across collections. Use the $unionWith stage with $vectorSearch for cross-collection search.
비검색 파이프라인
MongoDB recommends using $match, $sort, and so on in your pipeline to boost on specific fields within your collection without requiring a search pipeline.
지리적 관련성
You can use the $geoNear and the near operator inside $search for a geographic location search within the $rankFusion or $scoreFusion stage. However, the $geoNear and the near operator use different coordinate reference frames. Therefore, the result ordinals and scores might not be identical.
결과 제한
MongoDB recommends setting limits for the number of results to return for each sub-pipeline. If the pipeline stage inside the $rankFusion or $scoreFusion input pipeline does not support limiting the number of results (such as $search), MongoDB recommends that you use $limit subsequently inside the input pipeline to limit the number of documents that $rankFusion or $scoreFusion evaluates.
고급 사전 필터
MongoDB recommends using vectorSearch (MongoDB Search Operator) if you want to pre-filter data for vector search using $search operators that include analyzed text capabilities such as fuzzy search, phrase matching, location filtering, wildcard pattern matching, and so on.
제한 사항
$rankFusion 및 $scoreFusion를 사용하는 하이브리드 검색 에는 다음과 같은 제한 사항이 적용 .
$rankFusionMongoDB 8.0 이상에서만 지원됩니다(자동 업그레이드가 포함된 최신 버전 포함).$scoreFusion는 v8.3 이상에서 사용할 수 있습니다.참고
$scoreFusion을 사용하려면 클러스터가 MongoDB v8.3 이상을 실행해야 합니다. 8.0에서 업그레이드할 경우$rankFusion쿼리 실행을 일시 중지해야 할 수 있습니다.$rankFusion및$scoreFusion하위 파이프라인에는 다음 단계만 포함될 수 있습니다.$rankFusion그리고$scoreFusion는 각 하위 파이프라인에 대해 원본 입력 문서로 돌아가 추적할 수 있는 링크를 유지합니다. 따라서 다음을 지원하지 않습니다.$project단계storedSource fields
$rankFusion및$scoreFusion하위 파이프라인이 병렬이 아닌 직렬로 실행 .$rankFusion및$scoreFusion은(는) 페이지 지원 하지 않습니다.rankFusionMongoDB 8.0 이상을 실행 클러스터의 보기에서만 실행 수 있습니다. 뷰 정의 내에서 또는 time series 컬렉션 에서rankFusion를 실행 수 없습니다.
전제 조건
이 튜토리얼을 시도하려면 다음이 필요합니다.
MongoDB 버전 v8.0 이상이 있는 클러스터 .
$scoreFusion또는$rerank를 사용하려면 클러스터 에서 MongoDB v8.3 이상 실행 해야 합니다.참고
자동임베딩의 경우 다음 설정으로 클러스터 자동 확장 활성화해야 합니다.
현재 클러스터 계층이
M10또는M20(버스트 가능 CPU 인스턴스)인 경우 최대 인스턴스 크기를M30이상으로 설정합니다.현재 클러스터 계층이
M30이상인 경우 최대 인스턴스 크기를 현재 계층보다 큰 계층으로 설정합니다.NVMe 스토리지 사용하는 클러스터의 경우 저장 실행 시 NVME 클러스터 계층 확장 옵션을 선택합니다.
무료(
M0) 및 Flex 계층 클러스터의 경우 추가 조치는 필요하지 않습니다.
$rerank 쿼리를 실행 하려면 Atlas UI 에서 Native Reranking를 활성화 해야 합니다.자세한 학습 은 네이티브 재지정 활성화를 참조하세요.
The
Project Data Access Adminaccess to the project to create MongoDB Vector Search and MongoDB Search indexes.The
sample_mflixdatabase loaded into your cluster. To learn more, see Load Sample Data.mongosh또는 MongoDB Compass 사용하여 인덱스를 생성하고 클러스터 에서 쿼리를 시도할 수 있습니다.참고
Atlas CLI 사용하여 생성한 로컬 Atlas 배포 및 자체 관리( 온프레미스 ) 배포에서 이러한 하이브리드 검색 사용 사례를 시도할 수도 있습니다. 자세히 학습 로컬 Atlas 배포 만들기를 참조하세요.