Cloud Firestore crea índices automáticamente para admitir los tipos de consultas más comunes, pero te permite definir índices personalizados y anulaciones de índices como se describe en las guías de Cloud Firestore.
Puedes crear, modificar e implementar índices personalizados en Firebase console o con la CLI. Desde la CLI, edita el archivo de configuración de índices, con el nombre de archivo predeterminado firestore.indexes.json
, y, luego, impleméntalo con el comando firebase
deploy
.
Puedes exportar índices con la CLI a través de firebase firestore:indexes
.
Un archivo de configuración de índices define un objeto que contiene un array indexes
y un array opcional fieldOverrides
.
Por ejemplo:
{
// Required, specify compound and vector indexes
indexes: [
{
collectionGroup: "posts",
queryScope: "COLLECTION",
fields: [
{ fieldPath: "author", arrayConfig: "CONTAINS" },
{ fieldPath: "timestamp", order: "DESCENDING" }
]
},
{
collectionGroup: "coffee-beans",
queryScope: "COLLECTION",
fields: [
{
fieldPath: "embedding_field",
vectorConfig: { dimension: 256, flat: {} }
}
]
}
],
// Optional, disable indexes or enable single-field collection group indexes
fieldOverrides: [
{
collectionGroup: "posts",
fieldPath: "myBigMapField",
// We want to disable indexing on our big map field, and so empty the indexes array
indexes: []
}
]
}
Implementa una configuración de índices
Implementa la configuración de tu índice con el comando firebase deploy
. Si solo deseas implementar índices para las bases de datos configuradas en tu proyecto, agrega la marca --only firestore
. Consulta la referencia de opciones para este comando.
Para mostrar una lista de los índices implementados, ejecuta el comando firebase firestore:indexes
. Agrega la marca --database=<databaseID>
a la lista de índices de una base de datos que no sea la predeterminada de tu proyecto.
Si editas los índices con Firebase console, asegúrate de actualizar también tu archivo de índices local. Para obtener más información sobre la administración de índices, consulta las guías de Cloud Firestore.
Formato JSON
Índices
El esquema para un objeto del array indexes
es el siguiente. Las propiedades opcionales se identifican con el carácter ?
.
Ten en cuenta que los campos del documento de Cloud Firestore solo se pueden indexar en un modo,
por lo que un objeto de campo solo puede contener una de las propiedades order
, arrayConfig
y
vectorConfig
.
collectionGroup: string // Labeled "Collection ID" in the Firebase console
queryScope: string // One of "COLLECTION", "COLLECTION_GROUP"
fields: array
fieldPath: string
order?: string // One of "ASCENDING", "DESCENDING"; excludes arrayConfig and vectorConfig properties
arrayConfig?: string // If this parameter used, must be "CONTAINS"; excludes order and vectorConfig properties
vectorConfig?: object // Indicates that this is a vector index; excludes order and arrayConfig properties
dimension: number // The resulting index will only include vectors of this dimension
flat: {} // Indicates the vector index is a flat index
FieldOverrides
El esquema para un objeto del array fieldOverrides
es el siguiente. Las propiedades opcionales se identifican con el carácter ?
.
Ten en cuenta que los campos del documento de Cloud Firestore solo se pueden indexar en un modo,
por lo que un objeto de campo no puede contener las propiedades order
y
arrayConfig
.
collectionGroup: string // Labeled "Collection ID" in the Firebase console
fieldPath: string
ttl?: boolean // Set specified field to have TTL policy and be eligible for deletion
indexes: array // Use an empty array to disable indexes on this collectionGroup + fieldPath
queryScope: string // One of "COLLECTION", "COLLECTION_GROUP"
order?: string // One of "ASCENDING", "DESCENDING"; excludes arrayConfig property
arrayConfig?: string // If this parameter used, must be "CONTAINS"; excludes order property
Política de TTL
Se puede habilitar o inhabilitar una política de TTL con el array fieldOverrides
de la siguiente manera:
// Optional, disable index single-field collection group indexes
fieldOverrides: [
{
collectionGroup: "posts",
fieldPath: "ttlField",
ttl: "true", // Explicitly enable TTL on this Field.
// Disable indexing so empty the indexes array
indexes: []
}
]
Para mantener la indexación predeterminada en el campo y habilitar una política de TTL, haz lo siguiente:
{
"fieldOverrides": [
{
"collectionGroup": "yourCollectionGroup",
"fieldPath": "yourFieldPath",
"ttl": true,
"indexes": [
{ "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
{ "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
{ "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
]
}
]
}
Para obtener más información sobre las políticas de tiempo de actividad (TTL), consulta la documentación oficial.