Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Atlas
/

하이브리드 검색 수행 방법

하이브리드 검색은 동일하거나 유사한 쿼리 기준에 대해 서로 다른 검색 방식 또는 검색 쿼리를 결합한 것입니다. 이 기법은 알고리즘을 사용하여 결과를 순위화하고, 다양한 검색 방법의 결과를 통합하여 반환합니다. $rankFusion을 사용하여 하이브리드 검색을 수행할 수 있습니다.

상호 순위 융합은 서로 다른 검색 방법의 결과를 다음 작업을 통해 단일 결과 집합으로 결합하는 기술입니다.

  1. 결과에서 문서의 상호 순위를 계산합니다.

    각 검색 결과에서 순위가 매겨진 각 문서에 대해 먼저 그 문서의 순위(r)에 상수 60을 더합니다. 이때 상수는 점수 평활화를 위한 값(rank_constant)입니다. 그리고 rrank_constant의 합으로 1을 나눕니다. 이렇게 계산하여 결과 내 해당 문서의 역순위 값을 구합니다. rank_constant의 값을 설정할 수 없으며 기본값은 60입니다.

    reciprocal_rank = 1 / ( r + rank_constant )

    각 검색 방법에 대해 서로 다른 가중치(w)를 적용하여 해당 검색 방법에 더 많은 중요성을 부여합니다. 각 문서에 대해 가중치가 적용된 상호 순위는 가중치에 문서의 상호 순위를 곱하여 계산됩니다.

    weighted_reciprocal_rank = w x reciprocal_rank
  2. 결과에서 문서의 순위 도출 점수 및 가중치 점수를 결합합니다.

    모든 검색 결과의 각 문서에 해당 문서의 단일 점수에 대해 계산된 상호 순위를 추가합니다.

  3. 결과에 있는 문서의 합산 점수를 기준으로 결과를 정렬합니다.

    결과 내 문서를 단일, 통합된 순위 목록으로 정렬하기 위해 결과 전반에 걸쳐 결합된 점수를 기준으로 문서를 정렬합니다.

Atlas Vector Search를 활용하여 여러 유형의 하이브리드 검색을 수행할 수 있습니다. 특히 Atlas Vector Search는 다음과 같은 사용 사례를 지원합니다.

  • 단일 쿼리에서 전체 텍스트 검색과 벡터 검색 결합: 시맨틱 검색과 전체 텍스트 검색과 같은 서로 다른 검색 방법의 결과를 결합할 수 있습니다. 시맨틱 검색에는 $vectorSearch, 전체 텍스트 검색에는 $search를 사용해 결과를 구한 뒤 상호 순위 융합 기법으로 결과를 통합할 수 있습니다. 자세한 내용은 Atlas Vector Search와 Atlas Search를 활용한 하이브리드 검색 튜토리얼을 참고하세요. 해당 튜토리얼에서는 sample_mflix.embedded_movies 네임스페이스를 대상으로 시맨틱 검색과 전체 텍스트 검색을 수행하고 상호 순위 융합을 사용하여 결합된 결과를 검색하는 방법을 설명합니다.

  • 단일 쿼리에서 여러 벡터 검색 쿼리 실행: MongoDB $rankFusion 파이프라인은 동일한 컬렉션에 대해 실행되는 벡터 검색 쿼리를 포함한 여러 하위 파이프라인을 지원하며 상호 순위 융합 기법으로 결과를 통합합니다. 여러 $vectorSearch 쿼리를 결합하는 방법 튜토리얼에서는 다음과 같은 유형의 벡터 검색을 다룹니다.

    • 동일한 쿼리 내에서 의미상 유사한 텀을 데이터셋 전체에 걸쳐 포괄적으로 검색합니다.

    • 데이터셋 내 여러 필드를 검색하여, 쿼리에 가장 적합한 결과를 반환하는 필드를 확인할 수 있습니다.

    • 서로 다른 임베딩 모델에서 생성된 임베딩을 사용하여 검색하고, 각 모델 간의 의미 해석 차이를 확인할 수 있습니다.

하이브리드 검색에 $rankFusion 파이프라인 단계를 사용할 때는 다음 사항을 고려하세요.

하나의 검색 방식이 놓친 오탐을 포착하려면 개별 하위 파이프라인에서 분리된 결과를 사용하는 것이 바람직할 수도 있습니다. 결과가 분리된 경우 대부분 또는 모든 결과가 한 파이프라인에서 반환된 것처럼 보일 수 있으며, 다른 파이프라인에서는 반환되지 않을 수 있습니다. 그러나 모든 하위 파이프라인이 유사한 결과를 반환하게 하려면 하위 파이프라인당 결과 수를 늘려 보세요.

모든 쿼리에 대해 고정된 가중치를 사용하는 대신, 쿼리별로 텍스트(lexical) 쿼리와 벡터 쿼리에 가중치를 두는 것을 권장합니다. 이렇게 하면 각 쿼리에 대한 결과의 관련성을 향상시킬 수 있습니다. 이렇게 하면 가장 많은 자원이 필요한 쿼리에 리소스를 할당할 수 있어 계산 리소스 활용도도 높아집니다.

$rankFusion 단계에서 임의의 수의 하위 파이프라인을 결합할 수 있지만 이들 모두는 동일한 컬렉션에서 실행되어야 합니다. $rankFusion 단계를 사용해서는 컬렉션 간 검색을 할 수 없습니다. 컬렉션 간 검색을 위해서는 $vectorSearch와 함께 $unionWith 단계를 사용하세요.

별도의 검색 파이프라인 없이도 컬렉션 내 특정 필드를 강화하려면, 파이프라인에서 $match 또는 $sort 등의 단계를 사용하는 것을 권장합니다.

$rankFusion 단계 내에서 지리적 위치 검색을 하려면 $search 안에서 $geoNearnear 연산자를 사용할 수 있습니다. 단, $geoNearnear 연산자는 서로 다른 좌표 참조 체계를 사용합니다. 따라서 결과의 순서와 점수가 동일하지 않을 수 있습니다.

각 하위 파이프라인별로 반환할 결과 수에 제한을 두는 것이 좋습니다.

$rankFusion을 사용한 하이브리드 검색에 다음 제한 사항이 적용됩니다.

  • $rankFusion MongoDB 8.1+ (최신 Rapid Release 포함)에서만 지원됩니다.

  • $rankFusion 서브 파이프라인에는 다음 단계들만 사용할 수 있습니다.

  • $rankFusion 각 하위 파이프라인에 원본 입력 문서로 되돌아가 추적할 수 있는 연결 고리를 유지합니다. 따라서, 다음 사항을 지원하지 않습니다.

  • $rankFusion 하위 파이프라인은 병렬이 아닌 순차적으로 실행됩니다.

  • $rankFusion 은 페이지네이션을 지원하지 않습니다.

이 튜토리얼을 시도하려면 다음이 필요합니다.

  • MongoDB v8.1.0 이상 버전이 실행 중인 Atlas 클러스터

  • Atlas 클러스터에 로드된 sample_mflix 데이터베이스

  • mongosh (Atlas 클러스터 쿼리 실행용)

    참고

    Atlas CLI를 사용하여 생성한 로컬 Atlas 배포에서 이러한 하이브리드 검색 사용 사례를 시도할 수도 있습니다. 자세한 내용은 로컬 Atlas 배포 만들기를 참조하세요.

돌아가기

쿼리 결과 설명

이 페이지의 내용