Overview
En esta guía, aprenderá a consultar un índice de búsqueda de MongoDB y a usar la función de búsqueda avanzada de texto completo en sus aplicaciones de controlador C++. Puede consultar un índice de búsqueda mediante un $search Etapa de canalización de agregación.
Para obtener más información sobre la etapa de canalización $search, consulte Guía de búsqueda en el manual del servidor MongoDB.
Nota
Requisitos de las versiones Atlas y Community Edition
El $search operador de canalización de agregación solo está disponible para colecciones alojadas en clústeres de MongoDB Atlas con MongoDB v4.2 o posterior, o en clústeres de MongoDB Community Edition con MongoDB v.8 2 o posterior. Las colecciones deben estar cubiertas por un índice de MongoDB Search. Para obtener más información sobre la configuración necesaria y la funcionalidad de este operador, consulte la documentación de MongoDB Search.
Datos de muestra
Los ejemplos de esta guía utilizan la colección de los sample_mflix.movies conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción a MongoDB.
Cree un índice de búsqueda de MongoDB
Antes de realizar una búsqueda en una colección de Atlas, debe crear un índice de búsqueda de MongoDB en la colección. Un índice de búsqueda de MongoDB es una estructura de datos que categoriza los datos en un formato que permite realizar búsquedas. Para aprender a crear un índice de búsqueda de MongoDB, consulte Guía de índices de búsqueda de MongoDB.
Busque sus datos
Para usar la $search etapa de canalización de agregación, debe especificar un operador de consulta de MongoDB Search que indique el tipo de consulta que desea ejecutar. Opcionalmente, puede usar un recopilador para especificar los valores y rangos de la salida de la consulta. Para ver una tabla con todos los operadores y recopiladores disponibles con MongoDB Search, consulte la página "Operadores y recopiladores" en la documentación de Atlas.
El siguiente ejemplo utiliza el compound operador para combinar varios operadores en una sola consulta. Para obtener más información, consulte la guía de operadores compuestos en la documentación de Atlas.
La consulta tiene los siguientes criterios de búsqueda:
El campo
genresno debe contenerComedy.El campo
titledebe contener la cadenaNew York.
La consulta también incluye las siguientes etapas:
$limit, para limitar la salida a 10 resultados.$project, para excluir todos los campos exceptotitley agregar un camposcorellamado.
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 }
Información Adicional
Para obtener más información sobre los operadores de búsqueda de MongoDB disponibles, consulte la guía Operadores y recopiladores en la documentación de MongoDB Atlas.
Para obtener más información sobre MongoDB Search y ver más ejemplos de consultas, consulte la documentación de MongoDB Search.
Si desea realizar búsquedas vectoriales en sus datos almacenados en Atlas, debe usar MongoDB Vector Search. Para obtener más información sobre MongoDB Vector Search, consulte la documentación de MongoDB Vector Search.