Docs Menu
Docs Home
/ /

Cómo realizar una búsqueda híbrida

Una búsqueda híbrida es una agregación de diferentes métodos o consultas de búsqueda para criterios iguales o similares. Esta técnica utiliza algoritmos para clasificar los resultados y devolver resultados unificados de los diferentes métodos de búsqueda. Puede usar... $rankFusion para realizar una búsqueda híbrida.

La fusión recíproca de rangos es una técnica que permite combinar los resultados de diferentes métodos de búsqueda en un único conjunto de resultados realizando las siguientes acciones:

  1. Calcular el rango recíproco de los documentos en los resultados.

    Para cada documento clasificado en cada resultado de búsqueda, primero se debe sumar el rango (r) del documento con un número constante, 60, para suavizar la puntuación (rank_constant), y luego dividir 1 entre la suma de r y rank_constant para obtener el rango recíproco del documento en los resultados. No se puede establecer el valor de rank_constant y por defecto se establece en 60.

    reciprocal_rank = 1 / ( r + rank_constant )

    Para cada método de búsqueda, se deben aplicar diferentes ponderaciones (w) para dar más importancia a ese método de búsqueda. Para cada documento, el rango recíproco ponderado se calcula multiplicando el peso por el rango recíproco del documento.

    weighted_reciprocal_rank = w x reciprocal_rank
  2. Combinar las puntuaciones derivadas del rango y ponderadas de los documentos en los resultados.

    Para cada documento en todos los resultados de búsqueda, sume los rangos recíprocos calculados para obtener una puntuación única para el documento.

  3. Ordenar los resultados según la puntuación combinada de los documentos en los resultados.

    Ordenar los documentos en los resultados según la puntuación combinada para obtener una única lista clasificada de documentos.

Se puede aprovechar MongoDB Vector Search para realizar varios tipos de búsqueda híbrida. Específicamente, MongoDB Vector Search brinda soporte en los siguientes casos de uso:

  • Búsqueda de texto completo y vectorial en una sola consulta: Puede combinar resultados de diferentes métodos de búsqueda, como una búsqueda semántica y de texto completo. Puede usar $vectorSearch para la búsqueda semántica y $search para los resultados de la búsqueda de texto completo, y combinar los resultados mediante la técnica de fusión de rangos recíprocos. Para obtener más información, consulte el tutorial "Realizar una búsqueda híbrida con MongoDB Vector Search y MongoDB Search", que muestra cómo realizar una búsqueda semántica y una búsqueda de texto completo en el sample_mflix.embedded_movies espacio de nombres y obtener resultados combinados mediante la fusión de rangos recíprocos.

    Alternativamente, para una búsqueda híbrida más detallada donde la puntuación importa además del orden relativo de los resultados, se puede usar la etapa de pipeline $scoreFusion. Para aprender más, se puede consultar el tutorial Realizar búsqueda híbrida con MongoDB búsqueda vectorial y MongoDB búsqueda, que muestra cómo realizar una búsqueda semántica y una búsqueda de texto completo en el namespace sample_mflix.embedded_movies y recuperar los resultados del pipeline de entrada en un conjunto de resultados finales puntuados.

    Mientras $rankFusion clasifica documentos en función de sus posiciones (rangos relativos) en los pipelines de entrada usando el algoritmo de Fusión de Rangos Recíprocos, $scoreFusion clasifica documentos en función de las puntuaciones asignadas por los pipelines de entrada, utilizando expresiones matemáticas para combinar los resultados.

    En $rankFusion, las clasificaciones están influenciadas por las ponderaciones de los pipelines. En $scoreFusion, los pesos controlan la contribución de las puntuaciones de cada pipeline al resultado final.

  • Varias consultas de búsqueda vectorial en un solo query: el pipeline $rankFusion de MongoDB admite múltiples sub-pipelines que contienen consultas de búsqueda vectorial ejecutadas en la misma colección y que combinan sus resultados mediante la técnica de fusión de rango recíproco. El tutorial Cómo combinar múltiples $vectorSearch queries demuestra los siguientes tipos de búsqueda vectorial:

    • Realizar una búsqueda exhaustiva en el conjunto de datos para encontrar términos semánticamente similares en el mismo query.

    • Buscar en múltiples campos del conjunto de datos para determinar qué campos devuelven los mejores resultados para el query.

    • Realice una búsqueda usando incrustaciones de diferentes modelos de incrustación para determinar las diferencias de interpretación semántica entre los distintos modelos.

Al utilizar la etapa de $rankFusion o $scoreFusion del pipeline para la búsqueda híbrida, considere lo siguiente.

Si se desea capturar falsos negativos que una sola metodología de búsqueda no podría detectar, tener resultados disjuntos de sub-pipelines individuales podría ser aceptable. Cuando tiene resultados disjuntos, la mayoría o todos los resultados pueden parecer que se devuelven de uno de los pipelines y no del otro. Sin embargo, si se desea que todas las sub-pipelines devuelvan resultados similares, se debe intentar aumentar el número de resultados por sub-pipeline.

Recomendamos ponderar los queries léxicos y vectoriales de forma individual en lugar de tener ponderaciones estáticas para todos los queries, con el fin de mejorar la relevancia de los resultados de cada query. Esto también mejora la utilización de los recursos de cómputo al asignar recursos al query que más los necesita.

Puede combinar un número arbitrario de subcanalizaciones en la etapa $rankFusion o $scoreFusion, pero todas deben ejecutarse en la misma colección. No puede usar la etapa $rankFusion o $scoreFusion para buscar en colecciones. Utilice el $unionWith etapa con para búsqueda entre $vectorSearch colecciones.

Recomendamos usar $match, $sort, y demás en el pipeline para potenciar campos específicos dentro de la colección sin necesidad de un pipeline de búsqueda.

Se puede utilizar el $geoNear y el operador near dentro de $search para una búsqueda de ubicación geográfica dentro de la etapa $rankFusion o $scoreFusion. Sin embargo, el operador $geoNear y el operador near utilizan diferentes marcos de referencia de coordenadas. Por lo tanto, los ordinales de los resultados y las puntuaciones podrían no ser idénticos.

Recomendamos establecer límites para el número de resultados que se devolverán para cada sub-pipeline. Si la etapa del pipeline dentro del pipeline de entrada $rankFusion o $scoreFusion no brinda soporte para limitar el número de resultados (como $search), recomendamos que se utilice $limit posteriormente dentro del pipeline de entrada para limitar el número de documentos que $rankFusion o $scoreFusion evalúa.

Recomendamos utilizar vectorSearch (MongoDB Search Operator) si se desean filtrar previamente los datos para la búsqueda vectorial utilizando operadores $search que incluyen capacidades de texto analizado, como búsqueda difusa, coincidencia de frases, filtrado de ubicación, coincidencia de patrones comodín, etc.

Las siguientes limitaciones se aplican a la búsqueda híbrida utilizando $rankFusion y $scoreFusion:

  • $rankFusion solo es compatible con MongoDB 8.0 y posteriores (incluida la última versión con actualizaciones automáticas). $scoreFusion está disponible en v8.2+.

    Nota

    Al actualizar desde 8.0, es posible que tenga que pausar la ejecución de $rankFusion consultas.

  • $rankFusion y sub-pipelines $scoreFusion solo pueden contener las siguientes etapas:

  • $rankFusion y $scoreFusion mantienen un enlace rastreable al documento de entrada original para cada sub-pipeline. Por lo tanto, no se brinda soporte a lo siguiente:

  • $rankFusion y los sub-pipelines $scoreFusion se ejecutan en serie, no en paralelo.

  • $rankFusion Y $scoreFusion no admiten la paginación.

  • rankFusion solo se puede ejecutar en vistas en clústeres que ejecuten MongoDB 8.0 o una versión superior. No puedes ejecutar rankFusion dentro de una definición de vista o en una colección de series de tiempo.

Para probar estos tutoriales, debe contar con lo siguiente:

  • Un clúster con la versión v8.0 de MongoDB o posterior.

  • El acceso al proyecto para crear índices MongoDB Vector Search y MongoDB Project Data Access Admin Search.

  • La base de datos sample_mflix se ha cargado en el clúster.

  • mongosh o MongoDB Compass para crear los índices y probar las consultas en su clúster.

    Nota

    También se pueden probar estos casos de uso de búsqueda híbrida con implementaciones locales de Atlas que se creen con la Atlas CLI y en las implementaciones autogestionadas (on-premises). Para aprender más, se puede consultar Crear una implementación local de Atlas.

Volver

Búsqueda semántica de texto

En esta página