Menu Docs
Página inicial do Docs
/ / /
Driver C++
/

Índices de pesquisa do MongoDB

O recurso MongoDB Search permite realizar pesquisas de texto completo em collections hospedadas no Atlas. Antes de executar queries no MongoDB Search, você deve criar índices que especifiquem quais campos indexar e como serão indexados.

Para saber mais sobre o MongoDB Search, consulte a Visão Geral do MongoDB Search na documentação do MongoDB Search.

Os exemplos neste guia utilizam a coleção movies no banco de dados do sample_mflix a partir dos conjuntos de banco 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 Iniciar com Atlas .

Para gerenciar índices do MongoDB Search na coleção sample_mflix a partir do seu aplicação C++ , primeiro instancie um mongocxx::client que se conecte 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 de pesquisa MongoDB :

  • create_one(): Cria um índice de Pesquisa MongoDB com a configuração especificada

  • create_many(): Cria vários índices do MongoDB Search com as configurações especificadas

  • list(): Retorna uma mongocxx::cursor instância que aponta para uma lista de índices do MongoDB Search na coleção

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

  • drop_one(): Remove o índice especificado da coleção

Observação

O gerenciamento do índice de pesquisa do MongoDB é assíncrono

O driver C++ do MongoDB gerencia índices de pesquisa do MongoDB 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 Search ocorrem em segundo plano e podem não ser concluídas até algum tempo depois.

As seções a seguir fornecem exemplos de código que demonstram como usar cada método de gerenciamento de índice do MongoDB Search.

Para criar um único índice do MongoDB Search em uma collection, chame o método create_one() em uma instância mongocxx::search_index_view e passe uma instância mongoxcc::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 contendo o campo mappings , que especifica como configurar campos em seu índice

Dica

Para obter uma lista completa de campos que você pode configurar em um índice do MongoDB Search, consulte o guia Revisar a sintaxe do índice do MongoDB Search na documentação do MongoDB Search.

As seções a seguir mostram como criar um único índice do MongoDB Search que usa mapeamentos estáticos ou dinâmicos.

Use mapeamentos estáticos em seu índice do MongoDB Search para especificar os campos que você deseja indexar e configurar opções de índice para campos individuais.

Para criar um único índice de pesquisa do MongoDB que use mapeamentos estáticos, primeiro crie um documento definition contendo o campo mappings. No campo mappings, especifique um documento contendo os seguintes campos e valores:

  • dynamic: Defina como false.

  • fields: Documento que especifica os nomes dos campos que você deseja indexar e suas configurações de índice. Para saber mais sobre as mappings.fields opções do, consulte o Exemplo de mapeamento estático na documentação do MongoDB Search.

Em seguida, passe uma string name e o documento definition para um construtor mongocxx::search_index_model para instanciar um mongocxx::search_index_model. Passe esta instância mongocxx::search_index_model para o método create_one() para adicionar o índice de pesquisa MongoDB especificado à sua coleção.

O exemplo a seguir mostra como criar um único índice do MongoDB Search que usa mapeamentos estáticos:

// Create an index model with your index name and definition containing the fields you want to index
auto name = "myStaticIndex";
auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number"))));
auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields))));
auto model = mongocxx::search_index_model(name, definition.view());
// Create the search index
auto result = siv.create_one(model);
std::cout << "New index name: " << result << std::endl;
New index name: myStaticIndex

Importante

Você não pode indexar campos que contêm o sinal de dólar ($) no início do nome do campo.

Para saber mais sobre quando usar mapeamentos estáticos, consulte a seção Mapeamentos estáticos na documentação do MongoDB Search.

Use mapeamentos dinâmicos em seu índice do MongoDB Search para indexar automaticamente todos os campos dos tipos suportados. Para obter uma lista dos tipos de dados BSON compatíveis, consulte a seção Tipos de dados na documentação do MongoDB Search.

Para criar um único índice de pesquisa do MongoDB que use mapeamentos dinâmicos, primeiro crie um documento definition contendo o campo mappings. No campo mappings, especifique um documento contendo o campo dynamic com seu valor definido como true. Em seguida, passe uma string name e o documento definition para um construtor mongocxx::search_index_model para instanciar um mongocxx::search_index_model. Passe esta instância mongocxx::search_index_model para o método create_one() para adicionar o índice de pesquisa MongoDB especificado à sua coleção.

O exemplo a seguir mostra como criar um único índice do MongoDB Search que usa mapeamentos dinâmicos:

// Create an index model with your index name and definition
auto name = "myDynamicIndex";
auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", true))));
auto model = mongocxx::search_index_model(name, definition.view());
// Create the search index
auto result = siv.create_one(model);
std::cout << "New index name: " << result << std::endl;
New index name: myDynamicIndex

Para saber mais sobre quando usar mapeamentos dinâmicos, consulte a seção Mapeamentos dinâmicos na documentação do MongoDB Search.

Para criar vários índices do MongoDB Search, chame o método create_many() em uma instância mongocxx::search_index_view e passe um vetor de instâncias mongocxx::search_index_model especificando os índices do MongoDB Search que você deseja criar.

O exemplo a seguir mostra como criar vários índices do MongoDB Search:

// Create a vector to store Search index models
std::vector<mongocxx::search_index_model> models;
// Add an index model with dynamic mappings to the input vector
auto name_1 = "myDynamicIndex";
auto definition_1 = make_document(kvp("mappings", make_document(kvp("dynamic", true))));
auto model_1 = mongocxx::search_index_model(name_1, definition_1.view());
models.push_back(model_1);
// Add an index model with static mappings to the input vector
auto name_2 = "myStaticIndex";
auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number"))));
auto definition_2 = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields))));
auto model_2 = mongocxx::search_index_model(name_2, definition_2.view());
models.push_back(model_2);
// Create the search indexes
auto result = siv.create_many(models);
// Print the search index names
std::cout << "New index names:" << std::endl;
for (const std::string& name : result) {
std::cout << name << std::endl;
}
New index names:
myDynamicIndex
myStaticIndex

Para listar os índices de pesquisa do MongoDB em uma coleção, chame o método list() em uma instância mongocxx::search_index_view. Esse método retorna uma instância do mongocxx::cursor que você pode utilizar para iterar sobre os índices de pesquisa MongoDB da coleção.

O exemplo a seguir imprime uma lista de índices do MongoDB Search iterando sobre uma cursor::iterator instância que aponta para os índices de Criar vários índices do MongoDB Search:

auto cursor = siv.list();
for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) {
std::cout << bsoncxx::to_json(*it) << std::endl;
}
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : true } }, ...}
{ "id" : ..., "name" : "myStaticIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : false, "fields" : { "title" : { "type" : "string", "analyzer" : "lucene.standard" }, "year" : { "type" : "number" } } } }, ...}

Como alternativa, você pode listar um índice específico do MongoDB Search passando um nome de índice para o método list(). Isso retorna uma instância mongocxx::cursor que aponta para um conjunto de resultados que contém somente o índice especificado.

O exemplo seguinte utiliza o método list() para imprimir um índice com o nome myDynamicIndex:

auto cursor = siv.list("myDynamicIndex");
for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) {
std::cout << bsoncxx::to_json(*it) << std::endl;
}
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : true } }, ...}

Para atualizar um índice do MongoDB Search, chame o método update_one() em uma instância do 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 do MongoDB Search de Criar um índice de pesquisa com mapeamentos estáticos para usar um analisador simples no title campo :

auto update_fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.simple"))), kvp("year", make_document(kvp("type","number"))));
auto update_definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", update_fields))));
siv.update_one("myStaticIndex", update_definition.view());

Para remover um índice do MongoDB Search de uma coleção, chame o método drop_one() em uma instância mongocxx::search_index_view e passe o nome do índice que você deseja remover.

O exemplo a seguir mostra como remover um índice do MongoDB Search chamado myDynamicIndex:

siv.drop_one("myDynamicIndex");

Para ver exemplos executáveis que demonstram como gerenciar índices, consulte Otimizar Queries com Índices.

Para obter guias mais detalhados sobre como usar o recurso MongoDB Search e definir índices de MongoDB Search, consulte as seguintes páginas de documentação do MongoDB Search:

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

Voltar

Índices compostos