Overview
En esta guía, puedes aprender cómo utilizar el driver de sincronización de Kotlin para realizar
MongoDB Vector Search queries. el Aggregates La clase desarrolladores proporciona el método auxiliar vectorSearch(), que se puede usar para crear una etapa de pipeline $vectorSearch.
Importante
Compatibilidad de características
Para aprender qué versiones de MongoDB Atlas admiten esta funcionalidad, consulte Limitaciones en la documentación de MongoDB Atlas.
Realiza una búsqueda vectorial
Antes de poder realizar consultas de MongoDB Vector Search, debes crear un índice de MongoDB Vector Search en tu colección. Para aprender a crear programáticamente un índice de búsqueda vectorial, consulte la Guía de Índices de búsqueda de MongoDB y de búsqueda vectorial
Luego, puedes ejecutar una query de Búsqueda Vectorial de MongoDB utilizando el método vectorSearch() en un pipeline de agregación. Este método acepta los siguientes parámetros:
path:El campo a buscarqueryVector: El embedding vectorial que representa tu consulta de búsquedaindexName:El nombre del índice de búsqueda vectorial de MongoDB que se utilizarálimit:El número máximo de resultados a devolveroptions: (Opcional) Un conjunto de opciones que puedes usar para configurar la query de búsqueda vectorial
Ejemplo básico de búsqueda vectorial
Este ejemplo ejecuta una consulta de búsqueda vectorial de MongoDB que realiza las siguientes acciones:
Consulta el campo vectorial
plot_embedding.Limita los resultados a
5documentos.Especifica una búsqueda vectorial de Vecino Más Cercano Aproximado (ANN) que considera
150candidatos. Para obtener más información sobre las búsquedas ANN, consulta Búsqueda ANN en la documentación de MongoDB Atlas.
val vectorValues = FloatArray(1536) { i -> (i % 10).toFloat() * 0.1f } val queryVector = BinaryVector.floatVector(vectorValues) val indexName = "<vector search index>" // Specifies the path of the field to search val fieldSearchPath: FieldSearchPath = fieldPath("plot_embedding") // Creates the vector search pipeline stage with a limit and numCandidates val pipeline: List<Bson> = listOf( vectorSearch( fieldSearchPath, queryVector, indexName, 5L, approximateVectorSearchOptions(150) ), project( Projections.fields( Projections.excludeId(), Projections.include("title") ) ) ) val results = collection.aggregate(pipeline) results.forEach { doc -> println(doc.toJson()) }
{"title": "Berserk: The Golden Age Arc I - The Egg of the King"} {"title": "Rollerball"} {"title": "After Life"} {"title": "What Women Want"} {"title": "Truth About Demons"}
Tip
Query Vector Type
El ejemplo anterior crea una instancia de BinaryVector para que sirva como vector de query, pero también puedes crear un List de instancias de Double. Sin embargo, se recomienda usar el tipo BinaryVector para mejorar la eficiencia del almacenamiento.
Ejemplo de puntuación de búsqueda vectorial
El siguiente ejemplo muestra cómo ejecutar la misma consulta de búsqueda vectorial que el ejemplo anterior e imprimir la meta-puntuación de búsqueda vectorial de los documentos. Esta puntuación representa la relevancia de cada documento con respecto al vector de query:
val pipeline: List<Bson> = listOf( vectorSearch( fieldSearchPath, queryVector, indexName, 5L, approximateVectorSearchOptions(150) ), project( Projections.fields( Projections.excludeId(), Projections.include("title"), Projections.metaVectorSearchScore("score") ) ) ) val results = collection.aggregate(pipeline) results.forEach { doc -> println("Title: ${doc.getString("title")}, Score: ${doc.getDouble("score")}") }
Title: Berserk: The Golden Age Arc I - The Egg of the King, Score: 0.49899211525917053 Title: Rollerball, Score: 0.4976102113723755 Title: After Life, Score: 0.4965665936470032 Title: What Women Want, Score: 0.49622756242752075 Title: Truth About Demons, Score: 0.49614521861076355
Tip
Tutoriales de búsqueda vectorial
Para ver más tutoriales que muestran cómo ejecutar consultas de MongoDB Vector Search, consulta el Tutoriales de MongoDB Vector Search en la documentación de MongoDB Atlas.
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API: