Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Cómo realizar una búsqueda híbrida

Una búsqueda híbrida es una agregación de diferentes métodos de búsqueda o consultas de búsqueda para los mismos o similares criterios de query. Esta técnica utiliza algoritmos para clasificar los resultados y devolver resultados unificados de los diferentes métodos de búsqueda. Se puede usar $rankFusion y $scoreFusion 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.

La fusión de puntuación relativa es una técnica para combinar los resultados de diferentes métodos de búsqueda en un único conjunto de resultados mediante el uso de las puntuaciones de relevancia reales de cada pipeline, en lugar de la posición de clasificación de los documentos. Esto proporciona un control preciso sobre cómo se normalizan, ponderan y fusionan las puntuaciones de los diferentes métodos de recuperación. Puede utilizar $scoreFusion para realizar búsquedas híbridas mediante la fusión de puntuación relativa.

La fusión de puntuación relativa combina los resultados realizando las siguientes acciones:

Normalice las puntuaciones de cada pipeline.

Para cada documento en los resultados de cada pipeline, normaliza la puntuación sin procesar a una escala común utilizando el parámetro de normalización. Las escalas de puntuación difieren significativamente entre los métodos de recuperación; por ejemplo, las puntuaciones de búsqueda vectorial suelen estar entre 0 y 1, mientras que las puntuaciones de BM25 de texto completo pueden ser mucho más altas. La normalización lleva las puntuaciones de diferentes pipelines a una escala comparable antes de combinarlas. Se admiten tres métodos de normalización:

  • none — Las puntuaciones se combinan tal cual sin normalización. Utilícelo cuando todos los pipeline ya produzcan puntuaciones en escalas comparables.

  • sigmoid — Aplica la función sigmoide a cada puntuación, asignando puntuaciones al rango (0, 1) sin considerar la distribución de otras puntuaciones en el conjunto de resultados:

    normalized_score = 1 / (1 + e⁻ˢ)
  • minMaxScaler — Aplica el escalado min-max utilizando las puntuaciones mínimas y máximas observadas en el conjunto de resultados, asignando la puntuación más baja a 0 y la más alta a 1:

    normalized_score = (s - min_s) / (max_s - min_s)
Aplique pesos a las puntuaciones normalizadas de cada pipeline.

Para cada pipeline, multiplica la puntuación normalizada de cada documento por la ponderación del pipeline w. Las ponderaciones son 1 por defecto si no se especifican. Utilice ponderaciones para dar más importancia a un método de búsqueda sobre otro.

weighted_score = w x normalized_score
Combine las puntuaciones ponderadas de cada documento.
Para cada documento que aparece en todos los resultados de búsqueda, combina las puntuaciones ponderadas de todos los pipeline en los que apareció ese documento. El método de combinación por defecto es avg, que promedia las puntuaciones ponderadas. Utilice la expresión para definir una lógica de combinación personalizada.
Ordene los resultados por la puntuación combinada.
Ordena todos los documentos en los resultados según su puntuación combinada en todos los pipeline para producir una única lista clasificada unificada.

Puede utilizar MongoDB búsqueda vectorial para realizar varios tipos de búsqueda híbrida. Específicamente, MongoDB búsqueda vectorial admite los siguientes casos de uso:

  • Búsqueda de texto completo y vectorial en un solo query: se pueden combinar los resultados de diferentes métodos de búsqueda, como una búsqueda semántica y una búsqueda de texto completo. Se puede utilizar el $vectorSearch para la búsqueda semántica y el $search para los resultados de la búsqueda de texto completo y combinar los resultados mediante la técnica de fusión de rango recíproco. Para aprender más, consulte el tutorial Realizar búsqueda híbrida vectorial y de texto completo, que demuestra cómo realizar una búsqueda semántica y una búsqueda de texto completo en el namespace sample_mflix.embedded_movies y recuperar resultados clasificados combinados mediante la fusión de rango recíproco.

    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, consulte el tutorial Realizar búsqueda híbrida de vectores y de texto completo, 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.

    Además, para reordenar los documentos en los resultados según la relevancia para la query, puede usar la etapa $rerank después de la etapa $rankFusion o $scoreFusion. Para obtener más información, consulte $rerank etapas del pipeline de agregación.

  • 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 desea capturar falsos negativos que una metodología de búsqueda no pudo 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 desea que todas las sub-pipelines devuelvan resultados similares, intente aumentar el número de resultados por sub-pipeline.

MongoDB recomienda ponderar las query léxicas y vectoriales de forma individual en lugar de tener ponderaciones estáticas para todas las query, 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 a la query que más los necesita.

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

MongoDB recomienda usar $match, $sort, etc., en el pipeline para potenciar campos específicos dentro de la colección sin necesidad de un pipeline de búsqueda.

Puedes utilizar el operador $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 $geoNear y el operador cercano utilizan diferentes marcos de referencia de coordenadas. Por lo tanto, los ordinales y puntuaciones del resultado pueden no ser idénticos.

MongoDB recomienda 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 admite la limitación del número de resultados (como $search), MongoDB recomienda que utilice $limit posteriormente dentro del pipeline de entrada para limitar el número de documentos que $rankFusion o $scoreFusion evalúa.

MongoDB recomienda utilizar vectorSearch (operador de búsqueda de MongoDB) si desea prefiltrar datos para la búsqueda vectorial utilizando operadores $search que incluyen capacidades de texto analizado, como búsqueda difusa, coincidencia de frases, filtro por ubicación, coincidencia de patrones con comodines, 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 versiones posteriores (incluida la última versión con actualizaciones automáticas). $scoreFusion está disponible en v8.3 y versiones posteriores.

    Nota

    Para utilizar $scoreFusion, tu clúster debe ejecutar MongoDB v8.3 o posterior. Cuando se actualice desde 8.0, es posible que se deba pausar la ejecución de queries de $rankFusion .

  • $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 admiten 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 Views en clústeres que ejecuten MongoDB 8.0 o superior. No se puede ejecutar rankFusion dentro de una definición de vista ni 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. Para utilizar $scoreFusion, tu clúster debe ejecutar MongoDB v8.3 o posterior.

    Nota

    Para la incrustación automatizada, el escalado automático del clúster debe estar habilitado con las siguientes configuraciones:

    • Si su nivel de clúster actual es M10 o M20 (instancias de CPU con capacidad de ráfaga), establezca un tamaño máximo de instancia de M30 o superior.

    • Si el nivel de clúster actual es M30 o superior, establezca el tamaño máximo de la instancia en un nivel superior al actual.

    • Para clústeres que utilizan almacenamiento NVMe, selecciona la opción de nivel de clúster NVME de escala cuando el almacenamiento esté bajo.

    • Para los clústeres de nivel gratuito (M0) y flexible, no se requiere ninguna otra acción.

  • El acceso Project Data Access Admin al proyecto para crear los índices de MongoDB búsqueda vectorial y MongoDB Search.

  • La base de datos sample_mflix se cargó en tu clúster. Para obtener más información, consulte Cargar datos de muestra.

  • mongosh o MongoDB Compass para crear los índices y probar las consultas en el 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.