¿Qué son las bases de datos vectoriales?
Almacenan embeddings (vectores numéricos) para búsqueda por similitud semántica.
El problema tradicional
SQL: WHERE title LIKE '%gato%'
→ Solo encuentra "gato", no "felino" ni "mascota"
Vector: embedding("gato")
→ Encuentra conceptos SIMILARES semánticamente
¿Cómo funcionan?
| Paso | Proceso |
|---|---|
| 1. Embed | Texto → Vector [0.1, 0.3, ...] |
| 2. Store | Guardar vector en DB |
| 3. Query | Buscar vectores similares |
| 4. Return | Resultados por coseno/distancia |
Bases de datos populares
| DB | Tipo | Ideal para |
|---|---|---|
| Pinecone | Cloud | Producción fácil |
| Weaviate | Self-host | Control total |
| ChromaDB | Local | Desarrollo |
| pgvector | PostgreSQL | Si ya usas Postgres |
| Qdrant | Self-host | Alto rendimiento |
Ejemplo con ChromaDB
import chromadb
# Crear cliente
client = chromadb.Client()
collection = client.create_collection("docs")
# Agregar documentos (auto-embedding)
collection.add(
documents=["El gato duerme", "El perro corre"],
ids=["doc1", "doc2"]
)
# Buscar similares
results = collection.query(
query_texts=["mascota descansando"],
n_results=1
)
# → Encuentra "El gato duerme"
Índices vectoriales
| Algoritmo | Velocidad | Precisión |
|---|---|---|
| Flat | Lento | 100% |
| IVF | Medio | ~95% |
| HNSW | Rápido | ~95% |