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.