Visão geral
Neste guia, você pode aprender como executar uma query de um índice do MongoDB Search e usar a funcionalidade avançada de pesquisa de texto completo em seus aplicativos de driver C++ . Você pode fazer query de um índice de pesquisa usando um estágio de pipeline de agregação $search.
Para saber mais sobre a fase de pipeline $search, consulte o guia $search no manual do MongoDB Server.
Observação
Requisitos da versão do Atlas e Community Edition
O operador de pipeline de agregação $search está disponível somente para coleções hospedadas em clusters do MongoDB Atlas que executam o MongoDB v4.2 ou posterior, ou em clusters do MongoDB Community Edition que executam o MongoDB v8.2 ou posterior. As coleções devem ser cobertas por um índice de pesquisa do MongoDB. Para saber mais sobre a configuração necessária e a funcionalidade desse operador, consulte a documentação do MongoDB pesquisa.
Dados de amostra
Os exemplos neste guia usam a sample_mflix.movies collection 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 Iniciar do MongoDB .
Crie um índice de pesquisa do MongoDB
Antes de executar uma pesquisa em uma coleção do Atlas , primeiro você deve criar um índice do MongoDB Search na coleção. Um índice do MongoDB Search é uma estrutura de dados que categoriza os dados em um formato pesquisável. Para saber como criar um índice de pesquisa do MongoDB , consulte o guia Índices de pesquisa do MongoDB .
Pesquisar seus dados
Para usar a fase do pipeline de agregação $search, você deve especificar um operador de query do MongoDB pesquisa que indique o tipo de query que você deseja executar. Opcionalmente, você pode usar um coletor para especificar os valores e faixas da saída da query. Para visualizar uma tabela de todos os operadores e coletores disponíveis com o MongoDB pesquisa, consulte a página Operadores e Coletores na documentação do Atlas.
O exemplo seguinte utiliza o operador compound para combinar vários operadores em uma única query. Para saber mais, consulte o guia Operador composto na documentação do Atlas.
A query tem os seguintes critérios de pesquisa:
O campo
genresnão deve conterComedy.O campo
titledeve conter a stringNew York.
A query também inclui as seguintes fases:
$limitpara limitar a saída a 10 resultados.$project, para excluir todos os campos, excetotitlee adicionar um campo chamadoscore.
int main() { const mongocxx::instance instance{}; try { const mongocxx::client client{mongocxx::uri{"<connection-string>"}}; auto collection = client["sample_mflix"]["movies"]; mongocxx::pipeline pipeline{}; auto search_stage = bsoncxx::from_json(R"( { "$search": { "index": "test_index", "compound": { "mustNot": [ { "text": { "query": [ "Comedy" ], "path": "genres" } } ], "must": [ { "text": { "query": [ "New York" ], "path": "title" } } ] } } } )"); pipeline.append_stage(search_stage.view()); pipeline.limit(10); pipeline.project(bsoncxx::from_json(R"( { "_id" : 0, "title" : 1, "score" : { "$meta" : "searchScore" } } )")); auto cursor = collection.aggregate(pipeline); for (const auto& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; } } catch (const mongocxx::exception& e) { std::cerr << "MongoDB error: " << e.what() << std::endl; return EXIT_FAILURE; } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }
{ "title" : "New York, New York", "score" : 6.7870168685913085938 } { "title" : "New York", "score" : 6.2591872215270996094 } { "title" : "New York Doll", "score" : 5.3819599151611328125 } { "title" : "Escape from New York", "score" : 4.7203946113586425781 } { "title" : "Autumn in New York", "score" : 4.7203946113586425781 } { "title" : "Gangs of New York", "score" : 4.7203946113586425781 } { "title" : "Sleepless in New York", "score" : 4.7203946113586425781 } { "title" : "Sherlock Holmes in New York", "score" : 4.2036685943603515625 } { "title" : "New York: A Documentary Film", "score" : 4.2036685943603515625 } { "title" : "An Englishman in New York", "score" : 4.2036685943603515625 }
Informações adicionais
Para saber mais sobre os operadores disponíveis do MongoDB Pesquisa, consulte o guia Operadores e coletores na documentação do MongoDB Atlas.
Para obter mais informações sobre a pesquisa MongoDB e para ver mais exemplos de query, consulte a documentação da pesquisa MongoDB.
Se você deseja realizar pesquisas vetoriais em seus dados armazenados no Atlas, deve usar o MongoDB Vector Search. Para saber mais sobre a pesquisa vetorial do MongoDB, consulte a documentação da pesquisa vetorial do MongoDB.