8. Bases de Datos Vectoriales en la Web: PostgreSQL con pgvector y MariaDB
Instala y utiliza pgvector en PostgreSQL para almacenar y buscar vectores con índices HNSW y operadores de distancia coseno a escala web.
¿Necesitas una Base de Datos Vectorial Dedicada?
Cuando surge la necesidad de buscar por similitud semántica, muchos desarrolladores cometen el error de precipitarse a contratar servicios externos especializados (Pinecone, Weaviate, Qdrant). Esto agrega complejidad operativa, facturas adicionales y problemas de sincronización con tu base de datos principal de usuarios y productos.
Para el 95% de las aplicaciones web, la solución más sólida y madura es utilizar PostgreSQL con la extensión pgvector (o las nuevas capacidades vectoriales nativas de MariaDB 11.4+ y MySQL 8.4+). Permite almacenar tus tablas relacionales de clientes, pedidos y artículos junto con sus vectores de embeddings en una única base de datos transaccional con soporte ACID.
Operadores de Distancia y el Poder de los Índices HNSW
En pgvector, las búsquedas se realizan calculando la distancia entre el vector almacenado y el vector de la consulta del usuario mediante operadores nativos:
| Operador | Métrica de Distancia | Caso de Uso Recomendado |
|---|---|---|
<=> |
Distancia del Coseno (1 - Cosine Similarity) | Embeddings de texto (OpenAI, Gemini, Cohere) donde la magnitud no altera el significado. |
<-> |
Distancia Euclidiana (L2) | Vectores espaciales o modelos donde la magnitud absoluta del vector es relevante. |
<#> |
Producto Interno Negativo (Dot Product) | Embeddings normalizados donde el producto punto es matemáticamente equivalente al coseno pero más rápido. |
⚡ Esquema SQL con pgvector, Índice HNSW y Consulta de Similitud Coseno
Creación de tabla de artículos de conocimiento con vector de 1536 dimensiones e índice HNSW optimizado.
-- 1. Habilitar la extensión vectorial en PostgreSQL
CREATE EXTENSION IF NOT EXISTS vector;
-- 2. Crear tabla de base de conocimiento para la aplicación web
CREATE TABLE base_conocimiento (
id SERIAL PRIMARY KEY,
titulo VARCHAR(255) NOT NULL,
contenido TEXT NOT NULL,
categoria VARCHAR(80) NOT NULL,
-- Vector de 1536 dimensiones (compatible con text-embedding-3-small de OpenAI)
embedding vector(1536) NOT NULL,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 3. Crear índice HNSW para búsqueda rápida por Distancia del Coseno (<=>)
-- m = 16 (conexiones por nodo), ef_construction = 64 (precisión al indexar)
CREATE INDEX IF NOT EXISTS idx_conocimiento_hnsw_coseno
ON base_conocimiento
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
-- 4. Consulta en tiempo real: Encontrar los 3 artículos más cercanos a la duda del usuario
-- Parámetro $1: el vector de 1536 números generado por el backend a partir de la pregunta
SELECT
id,
titulo,
contenido,
categoria,
-- Convertimos la distancia del coseno en porcentaje de similitud (1 - distancia)
ROUND((1 - (embedding <=> '[0.012, -0.043, 0.089, ...]'::vector))::numeric, 4) AS similitud_score
FROM base_conocimiento
WHERE categoria = 'facturacion'
ORDER BY embedding <=> '[0.012, -0.043, 0.089, ...]'::vector ASC
LIMIT 3;
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lecciónEn PostgreSQL con pgvector, ¿qué operador se utiliza para ordenar registros por Distancia del Coseno?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar IA Aplicada a Desarrollo Web: APIs, RAG & Agentes y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.