
Mira el video:
¡Hola, geek! ¿Estás listo para llevar tus aplicaciones al siguiente nivel con capacidades de búsqueda semántica y programación funcional reactiva? 🫠
En esta guía, exploraremos cómo integrar la potente búsqueda vectorial de MongoDB Atlas con el robusto sistema de efectos de Effect-TS en TypeScript. ✨🤩
Si eres nuevo en alguno de estos conceptos, ¡no te preocupes! Desglosaremos todo paso a paso, pero, también podrías empezar con una de nuestras entradas introductorias.

¿Qué es la Búsqueda Vectorial y por qué la necesitas?
En el mundo actual impulsado por la IA, la búsqueda tradicional basada en palabras clave a menudo se queda corta. Imagina que buscas "recetas de postres saludables" pero tu sistema solo encuentra "recetas de tartas de manzana" porque no entiende la similitud conceptual. 🤷🏻
Aquí es donde entra la búsqueda vectorial. 🛸
La búsqueda vectorial, también conocida como
búsqueda de similitud o búsqueda semántica, funciona representando datos (texto, imágenes, audio, etc.) como embeddings: vectores numéricos de alta dimensión. ✅
Los elementos con significados o características similares tienen vectores que están "cerca" entre sí en este espacio multidimensional. Al buscar, convertimos nuestra consulta en un vector y encontramos los documentos cuyos vectores son más cercanos al de la consulta.
¿Por qué la necesitas?
- Relevancia Mejorada: Encuentra resultados basados en el significado, no solo en las palabras clave exactas.
- Experiencias Personalizadas: Ofrece recomendaciones de productos, contenido o usuarios más precisas.
- Aplicaciones de IA: Es la base para sistemas de recomendación, chatbots, recuperación de información y más.
MongoDB Atlas Vector Search: Tu Base de Datos Vectorial
MongoDB, la popular base de datos NoSQL orientada a documentos, ha integrado capacidades de búsqueda vectorial directamente en su plataforma Atlas. Esto significa que puedes almacenar tus datos y sus embeddings en el mismo lugar, simplificando tu arquitectura. La clave de esta funcionalidad es el stage de agregación $vectorSearch.
El Stage $vectorSearch
El stage $vectorSearch de MongoDB Atlas te permite realizar búsquedas de vecinos más cercanos (Nearest Neighbor) en tus datos. Soporta dos tipos principales de búsqueda [1]:
- ANN (Approximate Nearest Neighbor): Es el método más común y eficiente para grandes volúmenes de datos. Utiliza algoritmos como HNSW (Hierarchical Navigable Small Worlds) para encontrar los vectores más similares de forma aproximada, sin necesidad de escanear cada documento. Es rápido y escalable.
- ENN (Exact Nearest Neighbor): Realiza una búsqueda exhaustiva, calculando la distancia entre cada vector para encontrar el vecino más cercano exacto. Es más preciso pero computacionalmente más intensivo, por lo que se recomienda para conjuntos de datos más pequeños o para evaluar la precisión de las búsquedas ANN.
Aquí está la sintaxis básica del stage $vectorSearch:
Para usar $vectorSearch, primero debes crear un índice vectorial en tu clúster de MongoDB Atlas. Este índice especifica qué campo de tu colección contendrá los embeddings y qué algoritmo de similitud se utilizará.
Effect-TS: Programación Funcional Robusta en TypeScript
Effect-TS es un framework de TypeScript que proporciona un sistema de efectos funcionales completo. Esto significa que te ayuda a escribir código asíncrono y propenso a errores de una manera declarativa, segura y componible. Con Effect-TS, puedes manejar operaciones complejas como las interacciones con bases de datos de forma limpia y predecible. ✅
¿Por qué Effect-TS para la base de datos?
- Manejo de Errores: Effect-TS te obliga a manejar explícitamente los errores, lo que lleva a aplicaciones más robustas.
- Composición: Puedes combinar pequeñas operaciones Effect en flujos de trabajo complejos de manera sencilla.
- Inyección de Dependencias: Facilita la gestión de dependencias (como tu cliente de MongoDB) y hace que tu código sea más testeable.
- Recursos Seguros: Garantiza que los recursos (como las conexiones a la base de datos) se adquieran y liberen correctamente, incluso en caso de errores.
👷🏽♀️ Manos a la Obra: Integrando MongoDB Vector Search con Effect-TS
Ahora, veamos cómo unir estos dos mundos. Crearemos un pequeño proyecto TypeScript que:
- Define servicios para MongoDB y la generación de embeddings.
- Inserta documentos con embeddings en MongoDB.
- Realiza una búsqueda vectorial utilizando
$vectorSearchy Effect-TS.
Estructura del Proyecto
Paso 1: Configuración del Proyecto
Primero, crea un nuevo proyecto y instala las dependencias necesarias:
Paso 2: El Servicio de MongoDB (src/mongodbService.ts)
Este servicio gestionará la conexión a tu base de datos MongoDB. Usaremos Effect.acquireRelease para asegurar que la conexión se cierre limpiamente.
Paso 3: El Servicio de Embeddings (src/embeddingService.ts)
Este servicio se encargará de convertir texto en vectores numéricos. Para este ejemplo, usaremos un servicio de mock para evitar la necesidad de una clave API real, pero en un entorno de producción, integrarías un servicio como OpenAI o Cohere.
Paso 4: El Servicio de Búsqueda Vectorial (src/vectorSearchService.ts)
Este servicio contendrá la lógica para insertar documentos con embeddings y realizar la búsqueda vectorial en MongoDB.
Paso 5: El Ejemplo Principal (src/example.ts)
Este archivo orquestará todo, insertará algunos documentos de ejemplo y realizará una búsqueda.
Paso 6: Ejecutar el Ejemplo
Para ejecutar este ejemplo, primero asegúrate de tener una instancia de MongoDB corriendo localmente o en Atlas. Si usas Atlas, recuerda configurar tu índice vectorial con el nombre vector_index en la colección documents de la base de datos vector_search_db, y el campo embedding como tipo vector.
Luego, compila y ejecuta:
Verás cómo los documentos se insertan y luego se realiza una búsqueda, mostrando los resultados más relevantes. 🤓
👀 ¡Claro! Montarlo y verlo funcionar tú mismo(a) es la parte donde aprendes de verdad, invierte un par de horas, domina este tema. 💵 Este es el momento correcto: estudia y practica. 🧪
Consideraciones Finales y Próximos Pasos
Esta guía te ha proporcionado una base sólida para integrar MongoDB Vector Search con Effect-TS. Aquí hay algunas consideraciones adicionales:
- Generación de Embeddings en Producción: Para un caso de uso real, reemplazarías
MockEmbeddingLiveconEmbeddingLivey configurarías tuOPENAI_API_KEY(o la de tu proveedor de embeddings preferido). - Manejo de Errores Avanzado: Effect-TS ofrece muchas más herramientas para un manejo de errores sofisticado, como
Effect.retryoEffect.catchTag. - Optimización de Consultas: Experimenta con
numCandidatesylimitpara encontrar el equilibrio perfecto entre rendimiento y precisión para tus necesidades. - Filtrado Híbrido: Combina
$vectorSearchcon filtros MQL tradicionales para búsquedas híbridas que consideren tanto la similitud semántica como los criterios de filtrado exactos.
¡Espero que esta guía te sea útil para empezar a construir aplicaciones más inteligentes y robustas con MongoDB y Effect-TS! No dudes en revisar las otras publicaciones. 😌
Enlaces relacionados
[1] MongoDB Docs. Run Vector Search Queries. Disponible en: https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-stage/
Abrazo. Bliss. 🤓

¿Cómo cargar variables de entorno .env en Vite?
Checa este otro Post

