Búsqueda vectorial
$vectorSearch con índices vectoriales en los mismos nodos que tus documentos.
$vectorSearch encuentra los documentos cuyos vectores están más cerca del de tu consulta. Guardas el vector como un
campo más del documento y creas un índice de búsqueda de tipo vectorSearch.
Crear el índice
JavaScript
db.productos.createSearchIndex({
name: "vector",
type: "vectorSearch",
definition: {
fields: [
{ type: "vector", path: "embedding", numDimensions: 768, similarity: "cosine" },
{ type: "filter", path: "categoria" },
],
},
});Buscar
JavaScript
db.productos.aggregate([
{
$vectorSearch: {
index: "vector",
path: "embedding",
queryVector: vectorDeLaConsulta,
numCandidates: 200,
limit: 10,
filter: { categoria: "libros" },
},
},
{ $project: { nombre: 1, score: { $meta: "vectorSearchScore" } } },
]);Exacta o aproximada
Por defecto la búsqueda es aproximada: recorre un grafo HNSW por rango. Con exact: true compara con todos los
vectores y el resultado es el mismo en cualquier réplica. Sin exact, dos réplicas pueden devolver documentos distintos
a la misma marca, porque cada una enlaza su grafo al aplicar los cambios.
Una guía completa con embeddings está en Búsqueda semántica con $vectorSearch.