Menu Docs
Página inicial do Docs
/ /

Índices de pesquisa do MongoDB

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

Para saber mais sobre o MongoDB pesquisa, veja o Visão geral do MongoDB pesquisa na documentação do MongoDB pesquisa.

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 de pesquisa do MongoDB na coleção sample_mflix a partir do seu aplicativo C++, primeiro instancie um mongocxx::client que se conecte a um cluster Atlas 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 nó que permitem a você a interação com índices de pesquisa MongoDB:

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

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

  • list(): Retorna uma instância mongocxx::cursor que aponta para uma lista de índices de pesquisa do MongoDB 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 de pesquisa do MongoDB 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 do índice de pesquisa MongoDB.

Para criar um único índice de pesquisa do MongoDB Search em uma coleção, 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 de pesquisa do MongoDB, consulte o guia Revisar Sintaxe do índice de pesquisa do MongoDB na documentação do MongoDB Search.

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

Use mapeamentos estáticos em seu índice de pesquisa MongoDB 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 opções do mappings.fields, consulte o Exemplo de mapeamento estático na documentação do MongoDB pesquisa.

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 de pesquisa MongoDB 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 pesquisa.

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

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 de pesquisa 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 pesquisa.

Para criar vários índices de pesquisa do MongoDB, 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 de pesquisa do MongoDB que você deseja criar.

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

// 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 de pesquisa do MongoDB iterando sobre uma instância cursor::iterator que aponta para os índices de Criar vários índices de pesquisa do MongoDB:

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 de pesquisa específico do MongoDB 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 de pesquisa do MongoDB, 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 de pesquisa do MongoDB Search de Criar um índice de pesquisa com mapeamentos estáticos para usar um analisador simples no campo title:

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 de pesquisa do MongoDB 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 de pesquisa do MongoDB 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 Pesquisa e definir índices de pesquisa, consulte as seguintes páginas de documentação do MongoDB Pesquisa:

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

Voltar

Índices compostos