Visão geral
A Vector Search do MongoDB permite realizar pesquisas semânticas em incorporações vetoriais armazenadas no MongoDB Atlas. Antes de executar queries do MongoDB Vector Search , você deve criar índices que especifiquem quais campos indexar e como eles são indexados.
Para saber mais sobre a Vector Search do MongoDB , consulte a Visão geral da Vector Search do MongoDB na documentação da Vector Search do MongoDB .
Dados de amostra
Os exemplos deste guia usam a coleção movies no banco de dados sample_mflix dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia MongoDB Get Started.
Para gerenciar índices do MongoDB Vector Search na coleção sample_mflix a partir do seu aplicação C++ , primeiro instancie um mongocxx::client que se conecta a um Atlas cluster e atribua os seguintes valores às suas variáveis db e collection:
auto db = client["sample_mflix"]; auto collection = db["movies"];
Em seguida, chame o método search_indexes() em sua variável collection para instanciar um mongocxx::search_index_view em sua coleção:
auto siv = collection.search_indexes();
A classe mongocxx::search_index_view contém as seguintes funções de membro que permitem a você interagir com índices MongoDB Vector Search :
create_one(): Cria um índice do MongoDB Vector Search com a configuração especificadalist(): retorna um objetomongocxx::cursorque aponta para uma lista de índices do MongoDB Vector Search e Search na coleçãoupdate_one(): Atualiza a definição do índice de Vector Search MongoDB especificadodrop_one(): Remove o índice especificado da collection
As seções a seguir fornecem exemplos de código que demonstram como usar cada método de gerenciamento de índice do MongoDB Vector Search .
Observação
O gerenciamento do índice de Vector Search do MongoDB é assíncrono
O driver C++ do MongoDB gerencia índices do MongoDB Vector Search de forma assíncrona. Os métodos da biblioteca descritos nas seções a seguir retornam a resposta do servidor imediatamente, mas as alterações nos índices do MongoDB Vector Search ocorrem em segundo plano e podem não ser concluídas até algum tempo depois.
Crie um índice de Vector Search do MongoDB
Para criar um único índice do MongoDB Vector Search em uma collection, chame o método create_one() em um objeto mongocxx::search_index_view e passe um objeto mongocxx::search_index_model especificando o índice que você deseja criar.
O construtor mongocxx::search_index_model exige os seguintes argumentos:
name: string especificando o nome do seu índicedefinition: Documento especificando como configurar campos em seu índice
Dica
Para obter uma lista completa de campos que você pode configurar em um índice do MongoDB Vector Search , consulte a seção de referência Campos de índice do MongoDB Vector Search na documentação do MongoDB Vector Search .
O exemplo a seguir mostra como criar um único índice do MongoDB Vector Search :
// Define the index model with an index name and a definition document auto model = mongocxx::search_index_model( "<vectorSearchIndexName>", make_document( kvp("fields", make_array(make_document( kvp("type", "vector"), kvp("path", "<fieldName>"), kvp("numDimensions", 2048), kvp("similarity", "dotProduct"), kvp("quantization", "scalar")))))); model.type("vectorSearch"); // Creates the vector search index auto result = siv.create_one(model); std::cout << "New vector search index name: " << result << std::endl;
New vector search index name: vector_search
O índice de pesquisa vetorial tem a seguinte definição:
type: o tipo do índice évectorSearch.path: O índice está no campoplot_embedding_voyage_3_large.numDimensions: o número de dimensões nas incorporações vetoriais é2048.similarity: o índice mede a similaridade usandodotProductsimilaridade.quantization: o índice usa quantizaçãoscalar.
Listar índices de Vector Search do MongoDB
Para listar todos os índices de pesquisa em uma coleção, chame o método list() em um objeto mongocxx::search_index_view. Este método retorna um objeto mongocxx::cursor que você pode usar para iterar sobre os índices MongoDB Vector Search e MongoDB Search da coleção.
O exemplo a seguir imprime uma lista de índices de pesquisa disponíveis na coleção especificada:
auto cursor = siv.list(); for (auto const& doc : siv.list()) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ..., "latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}
Como alternativa, você pode listar um índice individual do MongoDB Vector Search passando um nome de índice para o método list(). Retorna um objeto mongocxx::cursor que aponta para um conjunto de resultados que contém apenas o índice especificado.
O exemplo a seguir utiliza o método list() para retornar o índice com o nome vector_index:
for (auto const& doc : siv.list("vector_index")) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ..., "latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}
Atualizar um índice de Vector Search do MongoDB
Para atualizar um índice do MongoDB Vector Search , chame o método update_one() em um objeto mongocxx::search_index_view e passe o nome do índice que você deseja atualizar e a definição para a qual atualizar o índice.
O exemplo a seguir mostra como atualizar o índice MongoDB Vector Search existente do exemplo anterior Criar um índice de Vector Search para usar em euclidean vez de dotProduct similaridade e binary em vez de scalar quantização:
auto definition = make_document( kvp("fields", make_array(make_document( kvp("type", "vector"), kvp("path", "plot_embedding_voyage_3_large"), kvp("numDimensions", 2048), kvp("similarity", "euclidean"), kvp("quantization", "binary"))))); siv.update_one("vector_index", definition.view());
Remover um índice do Vector Search do MongoDB
Para remover um índice do MongoDB Vector Search de uma coleção, chame o método drop_one() em um objeto mongocxx::search_index_view e passe o nome do índice que você deseja remover.
O exemplo seguinte mostra como remover um índice do MongoDB Vector Search denominado vector_index:
siv.drop_one("vector_index");
Informações adicionais
Para obter um aplicação de amostra que demonstra como gerenciar índices no driver C++ , consulte o guia Índices do .
Para obter guias mais detalhados sobre como usar o recurso MongoDB Vector Search e definir índices do MongoDB Vector Search , consulte as seguintes páginas de documentação do MongoDB Vector Search :
Documentação da API
Para saber mais sobre os métodos discutidos neste guia, consulte a seguinte documentação da API: