Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Como fazer a pesquisa híbrida

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.

A fusão de classificação recíproca é uma técnica para combinar resultados de diferentes métodos de pesquisa em um único conjunto de resultados, executando as seguintes ações:

  1. Calcula a classificação recíproca dos documentos nos resultados.

    Para cada documento classificado em cada resultado da pesquisa, primeiro adicione a classificação (r) do documento com um número constante, 60 para suavizar a pontuação (rank_constant) e, em seguida, divida 1 pela soma de r e rank_constant para a classificação recíproca do documento nos resultados. Você não pode definir o valor de rank_constant, que retorna ao padrão de 60.

    reciprocal_rank = 1 / ( r + rank_constant )

    Para cada método de pesquisa, aplique pesos diferentes (w) para dar mais importância a esse método de pesquisa. Para cada documento, a classificação recíproca ponderada é calculada multiplicando o peso pela classificação recíproca do documento.

    weighted_reciprocal_rank = w x reciprocal_rank
  2. Combine as pontuações ponderadas e derivadas da classificação dos documentos nos resultados.

    Para cada documento em todos os resultados de pesquisa, adicione as classificações recíprocas calculadas para uma única pontuação para o documento.

  3. Classifique os resultados pela pontuação combinada dos documentos nos resultados.

    Classifique os documentos nos resultados com base na pontuação combinada entre os resultados para obter uma lista única e combinada de documentos classificados nos resultados.

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.

A fusão de pontuação relativa combina os resultados executando as seguintes ações:

Normalize as pontuações de cada pipeline.

Para cada documento nos resultados de cada pipeline, normaliza a pontuação bruta para uma escala comum usando o parâmetro de normalização. As escalas de pontuação diferem significativamente entre os métodos de recuperação — por exemplo, as pontuações de pesquisa vetorial estão normalmente entre 0 e 1, enquanto as pontuações BM25 de texto completo podem ser muito mais altas. A normalização traz pontuações de diferentes pipelines para uma escala comparável antes de combiná-las. Três métodos de normalização são suportados:

  • none — As pontuações são combinadas como estão, sem normalização. Use quando todos os pipeline já produzirem pontuações em dimensionar comparáveis.

  • sigmoid — Aplica a função sigmoide a cada pontuação, mapeando pontuações para a faixa (0, 1) sem considerar a distribuição de outras pontuações no conjunto de resultados:

    normalized_score = 1 / (1 + e⁻ˢ)
  • minMaxScaler — Aplica o dimensionamento mínimo-máximo usando as pontuações mínimas e máximas observadas em todo o conjunto de resultados, mapeando a pontuação mais baixa para 0 e a mais alta para 1:

    normalized_score = (s - min_s) / (max_s - min_s)
Aplique pesos às pontuações normalizadas de cada pipeline.

Para cada pipeline, multiplica a pontuação normalizada de cada documento pelo peso w do pipeline. Os pesos são padronizados para 1 se não forem especificados. Use pesos para dar mais importância a um método de pesquisa em detrimento de outro.

weighted_score = w x normalized_score
Combine as pontuações ponderadas para cada documento.
Para cada documento que aparece em todos os resultados da pesquisa, combina as pontuações ponderadas de todos os pipelines nos quais esse documento apareceu. O método de combinação padrão é avg, que calcula a média das pontuações ponderadas. Use a expressão para definir a lógica de combinação personalizada.
Classifique os resultados pela pontuação combinada.
Classifica todos os documentos nos resultados com base na pontuação combinada em todos os pipelines para produzir uma única lista classificada unificada.

Você pode usar o MongoDB pesquisa vetorial para realizar vários tipos de pesquisa híbrida. Especificamente, o MongoDB pesquisa vetorial é compatível com os seguintes casos de uso:

  • 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 $vectorSearch for the semantic search and the $search for 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 the sample_mflix.embedded_movies namespace and retrieve combined ranked results by using reciprocal rank fusion.

    Como alternativa, para uma pesquisa híbrida mais granular, em que a pontuação é importante, além da ordem relativa dos resultados, você pode usar o estágio de pipeline $scoreFusion. Para aprender mais, consulte o tutorial Executar pesquisa híbrida de vetor e texto completo, que demonstra como executar uma pesquisa semântica e uma pesquisa de texto completo no namespace sample_mflix.embedded_movies e recuperar os resultados do pipeline de entrada em um conjunto de resultados da pontuação final.

    Enquanto $rankFusion classifica documentos com base em suas posições (classificações relativas) em pipelines de entrada usando o algoritmo Reciprocal Class Fusion, $scoreFusion classifica documentos com base em pontuações atribuídas pelos pipelines de entrada, usando expressões matemáticas para combinar os resultados.

    No $rankFusion, as classificações são influenciadas pelos pesos do pipeline. No $scoreFusion, os pesos controlam a contribuição das pontuações de cada pipeline para o resultado final.

    Além disso, para reordenar os documentos nos resultados com base na relevância para a query, você pode usar o estágio $rerank após o estágio $rankFusion ou $scoreFusion. Para saber mais, consulte $rerank fases do pipeline de agregação.

  • Múltiplas queries de pesquisa vetorial em uma única query: o pipeline $rankFusion do MongoDB suporta múltiplos sub-pipelines que contêm queries de pesquisa vetorial executadas na mesma coleção e combinam seus resultados usando a técnica de fusão de classificação recíproca. O tutorial Como combinar múltiplas queries $vectorSearch demonstra os seguintes tipos de pesquisa vetorial:

    • Realize uma pesquisa abrangente no seu conjunto de dados por termos semanticamente semelhantes na mesma query.

    • Pesquise vários campos no seu conjunto de dados para determinar quais deles retornam os melhores resultados para a query.

    • Pesquise usando incorporações de diferentes modelos de incorporação para determinar as diferenças de interpretação semântica entre os diferentes modelos.

Ao usar o estágio de pipeline $rankFusion ou $scoreFusion para pesquisa híbrida, considere o seguinte.

Se você deseja capturar falsos negativos que uma metodologia de pesquisa não conseguiu detectar, pode ser aceitável ter resultados desconexos de sub-pipelines individuais. Quando há resultados disjuntos, a maioria ou todos os resultados podem parecer ter sido retornados de um dos pipelines e não do outro. No entanto, se você deseja que todas as sub-pipelines retornem resultados semelhantes, tente aumentar o número de resultados por sub-pipeline.

O MongoDB recomenda ponderar as query lexicais e vetoriais individualmente, em vez de usar pesos estáticos para todas as query. Essa prática melhora a relevância dos resultados para cada query. Isso também aprimora a utilização dos recursos de computação, alocando os recursos para a query mais necessitada.

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.

As seguintes limitações se aplicam à pesquisa híbrida utilizando $rankFusion e $scoreFusion:

  • $rankFusion só é compatível com o MongoDB 8.0 e versões posteriores (incluindo a versão mais recente com atualizações automáticas). $scoreFusion está disponível na v8.3 e versões posteriores.

    Observação

    Para usar $scoreFusion, seu cluster deve executar o MongoDB v8.3 ou posterior. Ao fazer upgrade do 8.0, talvez seja necessário pausar a execução de queries $rankFusion.

  • $rankFusion e subpipelines $scoreFusion podem conter apenas os seguintes estágios:

  • $rankFusion e $scoreFusion mantém um link rastreável de volta ao documento de entrada original para cada sub-pipeline. Portanto, eles não são compatíveis com o seguinte:

  • $rankFusion e $scoreFusion subpipelines são executados em série, não em paralelo.

  • $rankFusion e $scoreFusion não suportam paginação.

  • rankFusion pode ser executado em visualizações somente em clusters executando MongoDB.8 0 ou posterior. Você não pode executar rankFusion dentro de uma definição de exibição ou em uma coleção de séries temporais.

Para experimentar estes tutoriais, você deve ter o seguinte:

  • Um cluster com versão v8.0 do MongoDB ou posterior. Para usar $scoreFusion ou $rerank, seu cluster deve executar o MongoDB v8.3 ou posterior.

    Observação

    Para a Incorporação Automática, o auto-scaling do cluster deve ser ativado com as seguintes configurações:

    • Se o tier do cluster atual for M10 ou M20 (instâncias de CPU burst-able), defina um tamanho máximo de instância de M30 ou maior.

    • Se a camada do cluster atual for M30 ou maior, defina o tamanho máximo da instância para um tier maior que o tier atual.

    • Para clusters que usam o armazenamento NVMe, selecione a opção Dimensionar a camada do cluster NVME quando o armazenamento estiver baixo.

    • Para clusters de tier Gratuito (M0) e Flex, nenhuma ação adicional é necessária.

    For running the $rerank queries, you must enable Native Reranking in the Atlas UI. To learn more, see Enable Native Reranking.

  • The Project Data Access Admin access to the project to create MongoDB Vector Search and MongoDB Search indexes.

  • The sample_mflix database loaded into your cluster. To learn more, see Load Sample Data.

  • mongosh ou MongoDB Compass para criar os índices e tentar as queries em seu cluster.

    Observação

    Você também pode experimentar esses casos de uso de pesquisa híbrida com sistemas locais do Atlas que você cria com o Atlas CLI e em seus sistemas autogerenciados (on-premises). Para saber mais, consulte Criar uma implantação de Atlas local.