Visão geral
Neste guia, você pode aprender a usar o driver Kotlin de sincronização para executar consultas de pesquisa do MongoDB Vector Search. A classe de construtores Aggregates fornece o método assistente vectorSearch(), que você pode usar para criar um estágio de pipeline $vectorSearch.
Importante
Compatibilidade de recursos
Para saber quais versões do MongoDB Atlas suportam este recurso, consulte Limitações na documentação do MongoDB Atlas.
Realizar uma Vector Search
Antes de executar queries de pesquisa do MongoDB pesquisa vetorial, você deve criar um índice do MongoDB pesquisa vetorial em sua coleção. Para aprender como criar programaticamente um índice de pesquisa vetorial, consulte o Índices de Pesquisa e Pesquisa Vetorial do MongoDB guia.
Em seguida, você pode executar uma query do MongoDB Vector Search usando o método vectorSearch() em um agregação pipeline. Este método aceita os seguintes parâmetros:
path: O campo a ser pesquisadoqueryVector: A incorporação do vetor que representa sua query de pesquisaindexName: O nome do índice de pesquisa vetorial MongoDB para usarlimit: o número máximo de resultados a serem retornadosoptions: (Opcional) Um conjunto de opções que você pode usar para configurar a query de pesquisa vetorial
Exemplo de Vector Search básica
Este exemplo executa uma query do MongoDB pesquisa vetorial que executa as seguintes ações:
Executa query do campo vetorial
plot_embedding.Limita os resultados a
5documentos.Especifica uma pesquisa vetorial do vizinho mais próximo (ANN) que considera
150candidatos. Para saber mais sobre pesquisas de ANN, consulte Pesquisa de ANN na documentação do 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"}
Dica
Tipo de vetor de query
O exemplo anterior cria uma instância de BinaryVector para servir como o vetor de consulta, mas você também pode criar um List de Double instâncias. No entanto, recomendamos que você use o tipo BinaryVector para melhorar a eficiência do armazenamento.
Exemplo de pontuação do Vector Search
O exemplo a seguir mostra como executar a mesma query de pesquisa vetorial do exemplo anterior e imprimir a meta-pontuação da pesquisa vetorial dos documentos. Essa pontuação representa a relevância de cada documento para o vetor 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
Dica
Tutoriais de Vector Search
Para ver mais tutoriais que mostram como executar query de pesquisa do MongoDB pesquisa vetorial, consulte os Tutoriais de pesquisa vetorial do MongoDB na documentação do MongoDB Atlas.
Documentação da API
Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo: