Cloud Firestore crea automáticamente índices para admitir los eventos más comunes tipos de consultas, 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.
con la CLI. Desde la CLI, edita tu archivo de configuración de índices con
el nombre de archivo predeterminado firestore.indexes.json
y, luego, implementarlo con el comando firebase
deploy
.
Puedes exportar índices con la CLI mediante 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
quieres 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 enumerar los índices implementados, ejecuta el comando firebase firestore:indexes
. Agrega el
La marca --database=<databaseID>
para enumerar los índices de una base de datos que no sea la tuya
la base de datos predeterminada del proyecto.
Si editas los índices con Firebase console, asegúrate también de actualiza tu archivo de índices local. Para obtener más información sobre la administración de índices, consulta el Guías de Cloud Firestore.
Formato JSON
Índices
El esquema de un objeto en el array indexes
es el siguiente. Opcional
se identifican con el carácter ?
.
Ten en cuenta que los campos del documento Cloud Firestore solo se pueden indexar en un modo,
por lo tanto, un objeto de campo solo puede contener una de las siguientes 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
Anulaciones de campo
El esquema de un objeto en el array fieldOverrides
es el siguiente. Opcional
se identifican con el carácter ?
.
Ten en cuenta que los campos del documento Cloud Firestore solo se pueden indexar en un modo,
Por lo tanto, un objeto de campo no puede contener tanto order
como arrayConfig
propiedades.
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.