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.
¿Qué es la fusión de rango recíproco?
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:
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 dividir1entre la suma deryrank_constantpara obtener el rango recíproco del documento en los resultados. No se puede establecer el valor derank_constanty por defecto se establece en60.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 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.
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.
Acerca de los diferentes casos de uso de búsqueda híbrida
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
$vectorSearchpara la búsqueda semántica y$searchpara 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 elsample_mflix.embedded_moviesespacio 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 namespacesample_mflix.embedded_moviesy recuperar los resultados del pipeline de entrada en un conjunto de resultados finales puntuados.Mientras
$rankFusionclasifica documentos en función de sus posiciones (rangos relativos) en los pipelines de entrada usando el algoritmo de Fusión de Rangos Recíprocos,$scoreFusionclasifica 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
$rankFusionde 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$vectorSearchqueries 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.
Considerations
Al utilizar la etapa de $rankFusion o $scoreFusion del pipeline para la búsqueda híbrida, considere lo siguiente.
Conjuntos de resultados disjuntos
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.
Pesos
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.
Múltiples pipelines
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.
Pipelines no relacionados con la búsqueda
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.
Relevancia geoespacial
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.
Limite los resultados
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.
Prefiltros avanzados
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.
Limitaciones
Las siguientes limitaciones se aplican a la búsqueda híbrida utilizando $rankFusion y $scoreFusion:
$rankFusionsolo es compatible con MongoDB 8.0 y posteriores (incluida la última versión con actualizaciones automáticas).$scoreFusionestá disponible en v8.2+.Nota
Al actualizar desde 8.0, es posible que tenga que pausar la ejecución de
$rankFusionconsultas.$rankFusiony sub-pipelines$scoreFusionsolo pueden contener las siguientes etapas:$rankFusiony$scoreFusionmantienen un enlace rastreable al documento de entrada original para cada sub-pipeline. Por lo tanto, no se brinda soporte a lo siguiente:$projectetapaCampos de storedSource
$rankFusiony los sub-pipelines$scoreFusionse ejecutan en serie, no en paralelo.$rankFusionY$scoreFusionno admiten la paginación.rankFusionsolo se puede ejecutar en vistas en clústeres que ejecuten MongoDB 8.0 o una versión superior. No puedes ejecutarrankFusiondentro de una definición de vista o en una colección de series de tiempo.
Requisitos previos
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 AdminSearch.La base de datos sample_mflix se ha cargado en el clúster.
mongosho 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.