Cloud Firestore crea automaticamente indici per supportare i tipi di query più comuni, ma consente di definire indici personalizzati e override degli indici come descritto nelle guide di Cloud Firestore.
Puoi creare, modificare ed eseguire il deployment di indici personalizzati nella console Firebase o utilizzando l'interfaccia a riga di comando. Nell'interfaccia a riga di comando, modifica il file di configurazione dell'indice con il nome file predefinito firestore.indexes.json
ed esegui il deployment utilizzando il comando firebase
deploy
.
Puoi esportare gli indici con l'interfaccia a riga di comando utilizzando firebase firestore:indexes
.
Un file di configurazione degli indici definisce un oggetto contenente un array indexes
e un array fieldOverrides
facoltativo.
Esempio:
{
// 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: []
}
]
}
Esegui il deployment di una configurazione indice
Esegui il deployment della configurazione dell'indice con il comando firebase deploy
. Se vuoi eseguire il deployment solo degli indici per i database configurati nel tuo progetto, aggiungi il flag --only firestore
. Vedi la documentazione di riferimento sulle opzioni per questo comando.
Per elencare gli indici di cui è stato eseguito il deployment, esegui il comando firebase firestore:indexes
. Aggiungi il flag --database=<databaseID>
per elencare gli indici di un database diverso da quello predefinito del progetto.
Se apporti modifiche agli indici utilizzando la console Firebase, assicurati di aggiornare anche il file indici locali. Per ulteriori informazioni sulla gestione degli indici, consulta le guide di Cloud Firestore.
Formato JSON
Indici
Lo schema per un oggetto nell'array indexes
è il seguente. Le proprietà facoltative sono identificate con il carattere ?
.
Tieni presente che i campi documento di Cloud Firestore possono essere indicizzati solo in una modalità,
quindi un oggetto campo può contenere solo una delle proprietà order
, arrayConfig
e
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
Lo schema per un oggetto nell'array fieldOverrides
è il seguente. Le proprietà facoltative sono identificate con il carattere ?
.
Tieni presente che i campi documento di Cloud Firestore possono essere indicizzati solo in una modalità,
quindi un oggetto campo non può contenere sia le proprietà order
che
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
Criterio TTL
Un criterio TTL può essere attivato o disattivato utilizzando l'array fieldOverrides
, come indicato di seguito:
// 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: []
}
]
Per mantenere l'indicizzazione predefinita in campo e attivare un criterio TTL:
{
"fieldOverrides": [
{
"collectionGroup": "yourCollectionGroup",
"fieldPath": "yourFieldPath",
"ttl": true,
"indexes": [
{ "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
{ "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
{ "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
]
}
]
}
Per ulteriori informazioni sui criteri di durata (TTL) consulta la documentazione ufficiale.