Menu Docs
Página inicial do Docs
/ /

Como fazer a pesquisa híbrida

Uma pesquisa híbrida é uma agregação de diferentes métodos de pesquisa ou queries de pesquisa para critérios de query iguais ou semelhantes. Essa técnica utiliza algoritmos para classificar resultados e retornar resultados unificados dos diferentes métodos de pesquisa. Você pode usar o $rankFusion para realizar uma pesquisa híbrida.

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.

Você pode aproveitar o MongoDB Vector Search para realizar vários tipos de pesquisa híbrida. Especificamente, o MongoDB Vector Search suporta os seguintes casos de uso:

  • Pesquisa vetorial e de texto completo em uma única query: é possível combinar resultados de diferentes métodos de pesquisa, como uma pesquisa semântica e de texto completo. Você pode usar o $vectorSearch para a pesquisa semântica e o $search para os resultados da pesquisa de texto completo e combinar os resultados usando a técnica de fusão de classificação recíproca. Para saber mais, consulte o tutorial Executar pesquisa híbrida com Vector Search MongoDB e MongoDB Search, que demonstra como executar uma pesquisa semântica e uma pesquisa de texto completo no namespace sample_mflix.embedded_movies e 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 saber mais, consulte o tutorial Executar pesquisa híbrida com Vector Search do MongoDB e MongoDB Search, 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.

  • 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.

Recomendamos atribuir pesos às queries lexicais e vetoriais individualmente, em vez de usar pesos estáticos para todas as queries. 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.

Você pode combinar um número arbitrário de subpipelines no estágio $rankFusion ou $scoreFusion, mas todos eles devem ser executados na mesma collection. Você não pode usar o estágio $rankFusion ou $scoreFusion para pesquisar coleções. Use o estágio $unionWith com $vectorSearch para pesquisa entre coleções.

Recomendamos 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.

Você pode usar o $geoNear e o operador próximo dentro do $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.

Recomendamos definir limites para o número de resultados a serem retornados para cada sub-pipeline.

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

  • $rankFusion só é suportado no MongoDB 8.0 e posterior (incluindo a versão mais recente com atualizações automáticas).

    Observação

    Você deve abrir um caso de suporte para usar o $rankFusion nas versões 8.0.X. Ao atualizar do 8.0, talvez seja necessário pausar a execução de $rankFusion queries.

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

  • $rankFusion e $scoreFusion preservar um link rastreável de volta para o documento de entrada original para cada subpipeline. Portanto, ele não suporta 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 que executam MongoDB 8.0 ou superior. Você não pode executar rankFusion dentro de uma definição de visualizaçã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.

  • O banco de dados sample_mflix carregado em seu cluster.

  • mongosh para tentar as queries no 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.

Voltar

Pesquisa semântica para texto

Nesta página