Í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
Visão geral
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.
Dados de amostra
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çãoupdate_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.
criar um í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 índicedefinition
: Documento contendo o campomappings
, 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.
Crie um índice do Atlas Search com mapeamentos estáticos
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 comofalse
.fields
: Documento que especifica os nomes dos campos que você deseja indexar e suas configurações de índice. Para saber mais sobre asmappings.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 .
Crie um índice do Atlas Search com mapeamentos dinâmicos
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 .
Crie vários índices 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
Listar índices do Atlas Search
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 } }, ...}
Atualizar um índice de Atlas Search
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());
Remover um Índice Atlas Search
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");
Informações adicionais
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 :
Documentação da API
Para saber mais sobre os métodos discutidos neste guia, consulte a seguinte documentação da API: