Búsqueda Híbrida en Manticore Search: Combinando BM25 y KNN
La búsqueda híbrida en Manticore Search combina la búsqueda de texto completo BM25 y la búsqueda vectorial KNN en una sola consulta. Esto permite considerar simultáneamente palabras clave exactas y similitud semántica. Para una consulta como "zapatillas de running baratas", BM25 proporcionará coincidencias basadas en tokens, mientras que KNN capturará el significado de frases como "calzado cómodo para trotar".
El método utiliza Fusión de Rangos Recíproca (RRF) para fusionar listas clasificadas. Los documentos con posiciones altas en cualquiera de las búsquedas reciben prioridad en la clasificación final.
Ventajas del Enfoque Híbrido
La búsqueda de texto completo es efectiva para términos raros, SKU y códigos de error. La búsqueda vectorial captura sinónimos y lenguaje natural, ya que las incrustaciones de conceptos relacionados se posicionan cerca en el espacio vectorial.
Debilidades de cada método:
- BM25 tiene dificultades con sinónimos.
- KNN ignora identificadores exactos sin significado semántico.
La recuperación híbrida mejora el recuerdo para consultas mixtas, minimizando la necesidad de lógica compleja.
Casos de Uso
La búsqueda híbrida es relevante en los siguientes escenarios:
- Consultas con intención y detalles, por ejemplo,
error python 403 prohibido— el código de error mediante BM25, la descripción mediante KNN. - Pipelines RAG para LLM — alimentando los fragmentos de texto más relevantes.
- Catálogos con datos estructurados (modelos de producto) y no estructurados (descripciones).
- Patrones de usuario impredecibles — frases exactas o lenguaje descriptivo.
En comercio electrónico, la búsqueda híbrida procesa nombres, descripciones e incrustaciones visuales en paralelo.
Mecanismo RRF
RRF agrega rangos sin normalizar puntuaciones. Fórmula: 1 / (rank_constant + rank). Por defecto rank_constant=60.
Ejemplo fusionando los 3 primeros:
| Documento | Rango BM25 | Rango KNN | Puntuación RRF |
|-----------|------------|-----------|----------------|
| Doc A | 1 | 2 | 0.0325 |
| Doc C | 3 | 1 | 0.0323 |
| Doc B | 2 | - | 0.0161 |
| Doc D | - | 3 | 0.0159 |
Doc A lidera debido a posiciones altas en ambas listas. RRF es preferible a la fusión basada en puntuación ya que no requiere calibración de escala.
Las subconsultas (MATCH y KNN) se ejecutan en paralelo; los filtros se aplican a todas.
Ejemplo Práctico con Bases de Conocimiento
En bases de datos de soporte, consulta "No se puede conectar al servidor" + código de error E-5020.
Resultados KNN:
| # | Título | Distancia |
|---|--------|-----------|
|1| E-5030: DNS | 0.572 |
|2| E-2091: Tiempo de espera | 0.583 |
|3| E-5020: SSL | 0.605 |
Híbrido con MATCH('E-5020') y KNN:
SELECT título, puntuación_híbrida()
FROM artículos_soporte
WHERE knn(incrustación, 'no se puede conectar al servidor')
AND MATCH('E-5020')
LIMIT 5
OPCIÓN método_fusión='rrf';
| # | Título | Puntuación Híbrida |
|---|--------|--------------------|
|1| Error E-5020: Certificado SSL No Coincide | 0.032 |
|2| E-5030 | 0.016 |
|3| E-2091 | 0.016 |
E-5020 sube al primer lugar: BM25 captura el código exacto, KNN captura el contexto.
Ejecutando Búsqueda Híbrida
Modo automático con coincidencia_híbrida():
SELECT id, puntuación_híbrida()
FROM productos
WHERE coincidencia_híbrida('zapatillas de running');
API JSON:
POST /buscar
{
"tabla": "productos",
"híbrido": { "consulta": "zapatillas de running" }
}
Manticore genera incrustaciones, realiza búsquedas y fusiona resultados.
Control explícito:
SELECT id, puntuación_híbrida()
FROM productos
WHERE match('zapatillas de running')
AND knn(incrustación, (0.12, 0.45, 0.78, ...))
OPCIÓN método_fusión='rrf';
Métricas disponibles: puntuación_híbrida(), peso() (BM25), distancia_knn().
Configuración de Fusión
rank_constant: dominio de posiciones superiores (valores más bajos aumentan el énfasis).pesos_fusión: pesos de subconsultas, por ejemplo, (texto=0.5, knn=0.3).tamaño_ventana: volumen de resultados intermedios.
Múltiple KNN:
SELECT id, puntuación_híbrida()
FROM productos
WHERE match('zapatillas de running') AS texto
AND knn(incrustación_título, (0.12, 0.45, ...)) AS similitud_título
AND knn(incrustación_imagen, (0.88, 0.21, ...)) AS similitud_imagen
OPCIÓN método_fusión='rrf',
pesos_fusión=(texto=0.5, similitud_título=0.3, similitud_imagen=0.2);
Conclusiones Clave
- La búsqueda híbrida distribuye señales: identificadores mediante BM25, significado mediante KNN.
- RRF asegura fusión estable sin calibración.
- Soporte para múltiples espacios vectoriales para datos multimodales.
- Ejecución paralela minimiza latencia.
- Generación automática de incrustaciones simplifica la integración.
— Editorial Team
Aún no hay comentarios.