Menu Docs
Página inicial do Docs
/ /

Índices de Vector Search do MongoDB

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 .

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 especificada

  • list(): retorna um objeto mongocxx::cursor que aponta para uma lista de índices do MongoDB Vector Search e Search na coleção

  • update_one(): Atualiza a definição do índice de Vector Search MongoDB especificado

  • drop_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.

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 índice

  • definition: 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 campo plot_embedding_voyage_3_large .

  • numDimensions: o número de dimensões nas incorporações vetoriais é 2048.

  • similarity: o índice mede a similaridade usando dotProduct similaridade.

  • quantization: o índice usa quantização scalar.

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, ...}

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());

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");

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 :

Para saber mais sobre os métodos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Índices de pesquisa do MongoDB

Nesta página