Uma pesquisa híbrida é uma agregação de diferentes métodos de pesquisa ou query de pesquisa para os mesmos critérios de query ou critérios semelhantes. Essa técnica usa algoritmos para classificar resultados e retornar resultados unificados dos diferentes métodos de pesquisa. Você pode usar $rankFusion e $scoreFusion para executar uma pesquisa híbrida.
O que é a fusão de classificação recíproca?
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:
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,60para suavizar a pontuação (rank_constant) e, em seguida, divida1pela soma dererank_constantpara a classificação recíproca do documento nos resultados. Você não pode definir o valor derank_constant, que retorna ao padrão de60.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 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.
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.
O que é fusão de pontuação relativa?
A fusão de pontuação relativa é uma técnica para combinar resultados de diferentes métodos de pesquisa em um único conjunto de resultados usando as pontuações de relevância reais de cada pipeline — em vez da posição de classificação dos documentos. Isso dá controle granular sobre como as pontuações de diferentes métodos de recuperação são normalizadas, ponderadas e mescladas. Você pode usar $scoreFusion para realizar pesquisa híbrida usando fusão de pontuação relativa.
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
0e1, 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 para0e a mais alta para1: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
wdo pipeline. Os pesos são padronizados para1se 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.
Sobre os diferentes casos de uso da pesquisa híbrida
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:
Pesquisa de texto completo e pesquisa vetorial em uma única query: você pode combinar resultados de diferentes métodos de pesquisa, como pesquisa semântica e de texto completo. Você pode usar o
$vectorSearchpara a pesquisa semântica e o$searchpara os resultados da pesquisa de texto completo e combinar os resultados usando a técnica de fusão de classificação recíproca. Para aprender mais, consulte o tutorial Executar pesquisa vetorial híbrida e pesquisa de texto completo, que demonstra como executar uma pesquisa semântica e uma pesquisa de texto completo no namespacesample_mflix.embedded_moviese recuperar resultados classificados combinados usando a fusão recíproca de classificações.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 namespacesample_mflix.embedded_moviese recuperar os resultados do pipeline de entrada em um conjunto de resultados da pontuação final.Enquanto
$rankFusionclassifica documentos com base em suas posições (classificações relativas) em pipelines de entrada usando o algoritmo Reciprocal Class Fusion,$scoreFusionclassifica 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
$rerankapós o estágio$rankFusionou$scoreFusion. Para saber mais, consulte$rerankfases do pipeline de agregação.Múltiplas queries de pesquisa vetorial em uma única query: o pipeline
$rankFusiondo 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$vectorSearchdemonstra 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.
Considerações
Ao usar o estágio de pipeline $rankFusion ou $scoreFusion para pesquisa híbrida, considere o seguinte.
Conjuntos de Resultados Disjuntos
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.
Pesos
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.
Múltiplos Pipelines
Você pode combinar um número arbitrário de sub-pipelines no estágio $rankFusion ou $scoreFusion, mas todos devem ser executados na mesma coleção. Você não pode usar o estágio $rankFusion ou $scoreFusion para pesquisar em coleções. Utilize o estágio $unionWith com $vectorSearch para pesquisa entre coleções.
Pipelines que não são de pesquisa
O MongoDB recomenda usar $match, $sort, e assim por diante em seu pipeline para impulsionar campos específicos na sua coleção sem precisar de um pipeline de pesquisa.
Relevância geoespacial
Você pode usar o $geoNear e o operador próximo dentro de $search para uma pesquisa de localização geográfica dentro do estágio $rankFusion ou $scoreFusion. No entanto, o $geoNear e o operador próximo utilizam estruturas de referência de coordenadas diferentes. Portanto, os ordinais de resultados e as pontuações podem não ser idênticos.
Limite os resultados
O MongoDB recomenda definir limites para o número de resultados a serem retornados para cada sub-pipeline. Se o estágio de pipeline dentro do pipeline de entrada $rankFusion ou $scoreFusion não suportar a limitação do número de resultados (como $search), o MongoDB recomenda que você use $limit posteriormente dentro do pipeline de entrada para limitar o número de documentos que $rankFusion ou $scoreFusion avalia.
Pré-filtros avançados
O MongoDB recomenda usar vectorSearch (MongoDB Search Operator) para pré-filtrar dados para pesquisa vetorial usando operadores $search que incluem funcionalidades de texto analisado, como pesquisa difusa, correspondência de frases, filtragem de localização, correspondência de padrões wildcard e assim por diante.
Limitações
As seguintes limitações se aplicam à pesquisa híbrida utilizando $rankFusion e $scoreFusion:
$rankFusionsó é compatível com o MongoDB 8.0 e versões posteriores (incluindo a versão mais recente com atualizações automáticas).$scoreFusionestá 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.$rankFusione subpipelines$scoreFusionpodem conter apenas os seguintes estágios:$rankFusione$scoreFusionmanté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:$projectestágiostoredSource campo
$rankFusione$scoreFusionsubpipelines são executados em série, não em paralelo.$rankFusione$scoreFusionnão suportam paginação.rankFusionpode ser executado em Visualizações apenas em clusters que executam o MongoDB 8.0 ou posterior. Você não pode executarrankFusiondentro de uma definição de visualização ou em uma coleção de séries temporais.
Pré-requisitos
Para experimentar estes tutoriais, você deve ter o seguinte:
Um cluster com versão v8.0 do MongoDB ou posterior. Para usar
$scoreFusion, seu cluster deve executar o MongoDB v8.3 ou posterior.Observação
Para embedding automatizado, o dimensionamento automático do cluster deve ser habilitado com as seguintes configurações:
Se o tier do cluster atual for
M10ouM20(instâncias de CPU burst-able), defina um tamanho máximo de instância deM30ou maior.Se a camada do cluster atual for
M30ou 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.
O acesso
Project Data Access Adminao projeto para criar índices do MongoDB pesquisa vetorial e do MongoDB Search.O
sample_mflixbanco de dados carregado em seu cluster. Para saber mais, consulte Carregar dados de amostra.mongoshou 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.