Administra los índices de la edición Enterprise
El comportamiento de indexación depende de la edición de la base de datos. En esta página, se describe cómo administrar tus índices para la edición Enterprise de Firestore. En el caso de la edición Standard de Firestore, consulta la Descripción general de los índices de la edición Standard de Firestore.Para obtener más información sobre los índices de la edición Enterprise de Firestore, consulta Descripción general de los índices.
Antes de comenzar
Antes de crear un índice en Firestore, asegúrate de tener asignado alguno de los siguientes roles:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
Para otorgar un rol, consulta Otorga un solo rol. Para obtener más información sobre los roles de Firestore y los permisos asociados, consulta Roles predefinidos.
Si definiste roles personalizados, asigna todos los permisos siguientes para crear índices:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Crear un índice
Para crear un índice, completa los siguientes pasos:
Consola deGoogle Cloud
-
En la consola de Google Cloud , ve a la página Bases de datos.
- Selecciona una base de datos de la lista.
- En el menú de navegación, haz clic en Índices.
- Haz clic en Crear índice.
- Ingresa un ID de colección.
- Agrega una o más rutas de campo y selecciona una opción de índice para cada una.
- Selecciona una opción de presencia de campo, ya sea no dispersa o dispersa.
- De manera opcional, puedes establecer la opción índice único.
- Haz clic en Crear.
- Tu índice nuevo se muestra en la lista de índices y Firestore comienza a crear tu índice. Cuando se cree el índice, verás una marca de verificación verde junto a él. Si no se crea el índice, consulta Errores en la compilación de índices para conocer las posibles causas.
gcloud CLI
Para crear un índice, usa el comando gcloud firestore indexes composite create.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense
Reemplaza lo siguiente:
- DATABASE_ID: Un ID de base de datos.
- COLLECTION: Es el nombre de una colección.
- FIELD_CONFIGURATION: Es una configuración de campo. Para cada campo, agrega
--field-config=field-path=. Por ejemplo:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descendingPara obtener más información sobre cómo configurar estos campos, consulta
--field-config.
Para crear un índice disperso, establece --density=sparse-any.
Para crear un índice único, agrega la marca --unique.
Terraform
Usa el recurso google_firestore_index.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" query_scope = "COLLECTION_GROUP" // You can include multiple field blocks fields { field_path = "FIELD_PATH" order = "ORDER" } // Optional multikey = true density = "DENSITY" }
Reemplaza lo siguiente:
- DATABASE_ID: Es el ID de la base de datos que elegiste
- COLLECTION: Es el nombre de la colección que se indexará
- FIELD_PATH: Es el nombre del campo que se indexará
- ORDER: Puede ser
ASCENDINGoDESCENDING - DENSITY: Puede ser
SPARSE_ANYoDENSE
Borra un índice
Para borrar un índice, completa los siguientes pasos:
Consola deGoogle Cloud
-
En la consola de Google Cloud , ve a la página Bases de datos.
- En la lista de bases de datos, selecciona una.
- En el menú de navegación, haz clic en Índices.
- En la lista de índices, elige Borrar en el botón Más del índice que deseas borrar.
- Haz clic en Borrar índice.
gcloud CLI
Para encontrar el nombre del índice, usa el comando
gcloud firestore indexes composite list.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Reemplaza DATABASE_ID por el ID de la base de datos.
-
Para borrar el índice, usa el comando
gcloud firestore indexes composite delete.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Reemplaza lo siguiente:
- INDEX_NAME: Es el nombre de un índice
- DATABASE_ID: Es un ID de base de datos
Tiempo de compilación de índices
Para compilar un índice, Firestore debe crear el índice y, luego, reabastecer las entradas del índice con los datos existentes. El tiempo necesario para crear un índice se determina según lo siguiente:
El tiempo de compilación mínimo de un índice es de unos minutos, incluso para una base de datos vacía.
El tiempo necesario para reabastecer las entradas de índice depende de la cantidad de datos existentes que pertenecen al índice nuevo. Cuantos más valores de campo coincidan con la definición del índice, más tiempo tardará el reabastecimiento.
Administra operaciones de larga duración
Las compilaciones de índices son operaciones de larga duración. En las siguientes secciones, se describe cómo trabajar con operaciones de larga duración para los índices.
Después de que comienzas a crear un índice, Firestore le asigna un nombre único a la operación. Los nombres de las operaciones incluyen el prefijo projects/PROJECT_ID/databases/DATABASE_ID/operations/. Por ejemplo:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Puedes omitir el prefijo cuando especifiques el nombre de una operación para el comando describe.
Enumera todas las operaciones de larga duración
Para enumerar las operaciones de larga duración, usa el comando gcloud firestore operations list. Este comando enumera las operaciones en curso y las que se completaron recientemente.
Las operaciones se enumeran durante algunos días luego de completarse:
gcloud firestore operations list
Verifica el estado de la operación
En lugar de enumerar todas las operaciones de larga duración, puedes enumerar los detalles de una sola operación:
gcloud firestore operations describe operation-name
Estima la hora de finalización
A medida que se ejecuta tu operación, mira el valor del campo state para conocer el estado general.
Una solicitud del estado de una operación de larga duración también muestra las métricas workEstimated y workCompleted. workEstimated muestra la cantidad total estimada de documentos que
procesará una operación. workCompleted muestra la cantidad de documentos procesados hasta el momento. Una vez que se completa la operación, workCompleted refleja la cantidad total de documentos que se procesaron, que podría ser diferente del valor de workEstimated.
Para estimar el progreso de una operación, divide workCompleted entre workEstimated.
A continuación, se muestra un ejemplo del progreso de la creación de un índice:
{
"operations": [
{
"name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
"metadata": {
"@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
"common": {
"operationType": "CREATE_INDEX",
"startTime": "2020-06-23T16:52:25.697539Z",
"state": "PROCESSING"
},
"progressDocuments": {
"workCompleted": "219327",
"workEstimated": "2198182"
}
},
},
...
Cuando se completa una operación, su descripción contendrá "done": true. Consulta el valor del campo state para ver el resultado de la operación. Si el campo done no está establecido en la respuesta, significa que la operación no se completó.