Saltar al contenido
Field Notes14 de julio de 20261 min read

Hybrid Search en Qdrant: Cuando Dejar de Usar Solo Vectores

La búsqueda vectorial pura tiene limitaciones; combinarla con filtrado y búsqueda léxica mejora significativamente la precisión y cobertura en sistemas complejos.

La búsqueda vectorial pura tiene limitaciones; combinarla con filtrado y búsqueda léxica mejora significativamente la precisión y cobertura en sistemas complejos.

En Buildations, hemos estado explorando diferentes estrategias para mejorar el retrieval en varios pipelines que involucran modelos de lenguaje (LLMs). Inicialmente, nos enfocamos en la búsqueda vectorial pura utilizando Qdrant para indexar embeddings generados con Ollama. Si bien esto funcionó razonablemente bien para casos simples, rápidamente encontramos limitaciones al intentar recuperar información relevante donde la semántica era ambigua o dependía de metadatos específicos (como fechas, categorías, o tipos de documentos). La búsqueda basada solo en vectores tiende a "olvidar" estos detalles contextuales.

La solución que adoptamos fue implementar un enfoque híbrido dentro de Qdrant. Esto implica combinar la búsqueda vectorial con dos métodos adicionales: filtrado por metadatos y búsqueda léxica (basada en palabras clave). El filtrado permite restringir los resultados a un subconjunto específico basado en propiedades conocidas, mientras que la búsqueda léxica ayuda a recuperar documentos que contienen términos relevantes incluso si su embedding no coincide perfectamente con el vector de consulta. Qdrant facilita esta combinación mediante sus capacidades de scoring y weighting, permitiendo ajustar la importancia relativa de cada método.

Un patrón que se repitió consistentemente fue que un peso del 100% para la búsqueda vectorial, aunque intuitivo, no siempre producía los mejores resultados. En muchos casos, una combinación de 60-80% vectorial, 10-20% léxico y el resto reservado para el scoring del filtrado (que se aplica directamente a la puntuación final) superó significativamente al enfoque puramente vectorial. Esta optimización es específica a cada dataset y caso de uso; requiere experimentación iterativa con diferentes pesos. LangGraph nos ayuda a gestionar esta complejidad automatizando algunas partes del proceso, aunque aún requiere supervisión humana para afinar los parámetros.

Finalmente, la integración con n8n permitió automatizar el pipeline de indexado en Qdrant, incluyendo la generación de embeddings y la actualización de metadatos. Esto nos liberó de tareas manuales repetitivas y aseguró que nuestro índice se mantuviera sincronizado con las últimas fuentes de datos. La clave no es reemplazar la búsqueda vectorial, sino complementarla para construir sistemas de retrieval más robustos y precisos.