Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Índices de búsqueda de MongoDB

La funcionalidad de MongoDB Search permite realizar búsquedas de texto completas en colecciones alojadas en Atlas. Antes de poder realizar consultas de MongoDB Search, es necesario crear índices que especifiquen qué campos se van a indexar y cómo se indexan.

Para obtener más información sobre MongoDB Search, consulta el Visión general de MongoDB Search en la documentación de MongoDB Search.

Los ejemplos de esta guía utilizan el movies colección en la base de datos sample_mflix de los 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, consulta la guía de Introducción a MongoDB.

Para gestionar los índices de búsqueda de MongoDB Search en la colección sample_mflix desde tu aplicación en C++, primero instancia un mongocxx::client que se conecte a un clúster de Atlas y asigna los siguientes valores a tus variables db y collection:

auto db = client["sample_mflix"];
auto collection = db["movies"];

Luego, llama al método search_indexes() en tu variable collection para crear una instancia de mongocxx::search_index_view en tu colección:

auto siv = collection.search_indexes();

La clase mongocxx::search_index_view contiene las siguientes funciones miembro que le permiten interactuar con los índices de búsqueda de MongoDB:

  • create_one(): Crea un índice de Búsqueda de MongoDB con la configuración especificada

  • create_many(): Crea múltiples índices de búsqueda de MongoDB con las configuraciones especificadas

  • list(): Devuelve una instancia de mongocxx::cursor que apunta a una lista de índices de MongoDB Search en la colección

  • update_one(): Actualiza la definición del índice de búsqueda de MongoDB especificado

  • drop_one(): remueve el índice especificado de la colección.

Nota

La gestión de índices de MongoDB Search es asíncrona.

El driver de C++ de MongoDB gestiona los índices MongoDB Search de forma asíncrona. Los métodos de la librería descritos en las siguientes secciones devuelven inmediatamente la respuesta del servidor, pero los cambios en sus índices de MongoDB Search se realizan en segundo plano y podrían no completarse hasta algún tiempo después.

Las siguientes secciones proporcionan ejemplos de código que demuestran cómo utilizar cada método de gestión de índices de MongoDB Search.

Para crear un único índice de MongoDB Search en una colección, llama al método create_one() en una instancia mongocxx::search_index_view y pasa una instancia mongoxcc::search_index_model especificando el índice que deseas crear.

El constructor mongocxx::search_index_model requiere los siguientes argumentos:

  • name: String que especifica el nombre del índice

  • definition: documento que contiene el campo mappings, que especifica cómo configurar los campos en su índice

Tip

Para ver una lista completa de los campos que puedes configurar en un índice de MongoDB Search, consulta la guía Revisión de la sintaxis del índice de MongoDB Search en la documentación de MongoDB Search.

Las siguientes secciones muestran cómo crear un único índice de MongoDB Search que utiliza asignaciones estáticas o dinámicas.

Utiliza asignaciones estáticas en tu índice de MongoDB Search para especificar los campos que deseas indexar y configura las opciones de índice para campos individuales.

Para crear un único índice de búsqueda de MongoDB que utilice asignaciones estáticas, primero crea un documento definition que contenga el campo mappings. En el campo mappings, especifica un documento que contenga los siguientes campos y valores:

  • dynamic: Establecer en false.

  • fields: Documento que especifica los nombres de los campos que desea indexar y sus configuraciones de índice. Para obtener más información sobre las opciones de mappings.fields, consulte el Ejemplo de mapeo estático en la documentación de MongoDB Search.

Luego, pasa una string name y el documento definition a un constructor mongocxx::search_index_model para crear una instancia de un mongocxx::search_index_model. Pase esta instancia mongocxx::search_index_model al método create_one() para añadir el índice de MongoDB Search especificado a su colección.

El siguiente ejemplo muestra cómo crear un único índice de búsqueda de MongoDB que usa asignaciones estáticas:

// 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

No puedes indexar campos que contengan el signo de dólar ($) al inicio del nombre del campo.

Para obtener más información sobre cuándo usar mapeos estáticos, consulte la sección Mapeos Estáticos en la documentación de MongoDB Search.

Utilice mapeos dinámicos en su índice de búsqueda de MongoDB para indexar automáticamente todos los campos de los tipos compatibles. Para obtener una lista de los tipos de datos BSON compatibles, consulte la sección Tipos de datos en la documentación de MongoDB Search.

Para crear un único índice de MongoDB Search que utilice asignaciones dinámicas, crea primero un documentodefinition que contenga el campo mappings. En el campo mappings, especifica un documento que contenga el campo dynamic con su valor establecido en true. A continuación, pasa un string de name y el documento definition a un constructor mongocxx::search_index_model para crear una instancia de mongocxx::search_index_model. Pasa esta instancia mongocxx::search_index_model al método create_one() para añadir el índice de MongoDB Search especificado a tu colección.

El siguiente ejemplo muestra cómo crear un único índice de búsqueda de MongoDB que utilice asignaciones dinámicas:

// 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 obtener más información sobre cuándo usar asignaciones dinámicas, consulta la sección Asignaciones dinámicas en la documentación de MongoDB Search.

Para crear múltiples índices de búsqueda MongoDB, llame al método create_many() en una instancia de mongocxx::search_index_view y pase un vector de instancias de mongocxx::search_index_model especificando los índices de búsqueda MongoDB que desea crear.

El siguiente ejemplo muestra cómo crear varios índices de MongoDB 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 enumerar los índices de MongoDB Search en una colección, llama al método list() en una instancia de mongocxx::search_index_view. Este método devuelve una instancia mongocxx::cursor que se puede utilizar para iterar sobre los índices de MongoDB Search de la colección.

El siguiente ejemplo imprime una lista de índices de búsqueda de MongoDB iterando sobre una instancia de cursor::iterator que apunta a los índices desde Crear múltiples índices de búsqueda de 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, puedes enumerar un índice de búsqueda específico de MongoDB pasando un nombre de índice en el método list(). Esto devuelve una instancia de mongocxx::cursor que apunta a un conjunto de resultados que solo contiene el índice especificado.

El siguiente ejemplo utiliza el método list() para imprimir un índice con el nombre 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 actualizar un índice de búsqueda de MongoDB, se debe llamar al método update_one() en una instancia de mongocxx::search_index_view y pasar el nombre del índice que se quiera actualizar y la definición para actualizar ese índice.

El siguiente ejemplo muestra cómo actualizar el índice de MongoDB Search desde Crear un índice de búsqueda con mapeos estáticos para usar un analizador simple en el 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 un índice de búsqueda de MongoDB de una colección, llama al método drop_one() en una instancia mongocxx::search_index_view y pasa el nombre del índice que deseas remover.

El siguiente ejemplo muestra cómo remover un índice de búsqueda de MongoDB llamado myDynamicIndex:

siv.drop_one("myDynamicIndex");

Para ver ejemplos ejecutables que demuestran cómo administrar los índices, consulte Optimiza las queries con índices.

Para obtener guías más detalladas sobre cómo usar la funcionalidad de búsqueda de MongoDB y definir los índices de búsqueda de MongoDB, consulta las siguientes páginas de documentación de búsqueda de MongoDB:

Para obtener más información sobre los métodos discutidos en esta guía, consulta la siguiente documentación de la API:

Volver

Índices compuestos

En esta página