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

Índices de pesquisa do Atlas

Nesta página

  • Visão geral
  • Dados de amostra
  • criar um índice do atlas search
  • Crie um índice do Atlas Search com mapeamentos estáticos
  • Crie um índice do Atlas Search com mapeamentos dinâmicos
  • Crie vários índices do Atlas Search
  • Listar índices do Atlas Search
  • Atualizar um índice de Atlas Search
  • Remover um Índice Atlas Search
  • Informações adicionais
  • Documentação da API

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

Para saber mais sobre o Atlas Search , consulte a Visão Geral do Atlas Search na documentação do Atlas 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 Atlas 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 interagir com índices do Atlas Search :

  • create_one(): Cria um índice do Atlas Search com a configuração especificada

  • create_many(): Cria múltiplos índices do Atlas Search com as configurações especificadas

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

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

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

Observação

O gerenciamento do índice do Atlas Search é assíncrono

O driver C++ do MongoDB gerencia índices do Atlas 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 Atlas 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 Atlas Search.

Para criar um único índice do Atlas 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 dos campos que você pode configurar em um índice do Atlas Search , consulte o guia Revisar a sintaxe do índice do Atlas Search Atlas Search na documentação do Atlas Search.

As seções seguintes mostram como criar um único índice de Atlas Search que utiliza mapeamentos estáticos ou dinâmicos.

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

Para criar um único índice do Atlas Search 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, consulte o Exemplo de mapeamento estático na documentação do Atlas 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 do Atlas Search especificado à sua coleção.

O exemplo seguinte mostra como criar um único índice do Atlas Search que utiliza 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 Atlas Search .

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

Para criar um único índice do Atlas Search 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 do Atlas Search especificado à sua coleção.

O exemplo seguinte mostra como criar um único índice do Atlas Search que utiliza 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 Atlas Search .

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

O exemplo seguinte mostra como criar múltiplos índices do Atlas 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 do Atlas Search em uma collection, chame o método list() em uma instância mongocxx::search_index_view. Este método retorna uma instância do mongocxx::cursor que você pode utilizar para iterar sobre os índices de Atlas Search da coleção.

O exemplo a seguir imprime uma lista de índices do Atlas Search iterando sobre uma cursor::iterator instância que aponta para os índices de Criar vários índices do Atlas 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 Atlas 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 Atlas 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 seguinte mostra como atualizar o índice do Atlas Search de Criar um Índice de Pesquisa com Mapeamentos Estáticos para utilizar 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 Atlas 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 seguinte mostra como remover um índice do Atlas Search denominado myDynamicIndex:

siv.drop_one("myDynamicIndex");

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

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

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

Voltar

Índices compostos