Crea un indice mancante tramite un messaggio di errore
Se si tenta una query composta con una clausola di intervallo che non è mappata a un indice esistente, viene visualizzato un errore. Il messaggio di errore include un collegamento diretto per creare l'indice mancante nella console Firebase.
Segui il collegamento generato alla console Firebase, rivedi le informazioni compilate automaticamente e fai clic su Crea .
Usa la console Firebase
Per creare manualmente un nuovo indice dalla console Firebase:
- Vai alla sezione Cloud Firestore della console Firebase .
- Vai alla scheda Indici e fai clic su Aggiungi indice .
- Immettere il nome della raccolta e impostare i campi in base ai quali si desidera ordinare l'indice.
- Fare clic su Crea .
La creazione degli indici può richiedere alcuni minuti, a seconda delle dimensioni della query. Dopo averli creati, puoi vedere i tuoi indici e il loro stato nella sezione Indici compositi. Se stanno ancora costruendo, la console Firebase include una barra di stato dell'edificio.
Rimuovi indici
Per eliminare un indice:
- Vai alla sezione Cloud Firestore della console Firebase .
- Fare clic sulla scheda Indici .
- Passa il mouse sull'indice che desideri eliminare e seleziona Elimina dal menu contestuale.
- Conferma di volerlo eliminare facendo clic su Elimina dall'avviso.
Usa la Firebase CLI
Puoi anche distribuire gli indici con la CLI di Firebase . Per iniziare, esegui firebase init firestore
nella directory del tuo progetto. Durante l'installazione, la CLI di Firebase genera un file JSON con gli indici predefiniti nel formato corretto. Modifica il file per aggiungere altri indici e distribuirlo con il comando firebase deploy
. Se desideri distribuire solo gli indici, aggiungi il --only firestore:indexes
. Se apporti modifiche agli indici utilizzando la console Firebase, assicurati di aggiornare anche il file degli indici locale. Fare riferimento al riferimento alla definizione dell'indice JSON .
Tempo di creazione dell'indice
Per creare un indice, Cloud Firestore deve configurare l'indice e quindi riempire l'indice con i dati esistenti. Il tempo di creazione dell'indice è la somma del tempo di configurazione e del tempo di riempimento:
L'impostazione di un indice richiede alcuni minuti. Il tempo minimo di compilazione per un indice è di pochi minuti, anche per un database vuoto.
Il tempo di riempimento dipende dalla quantità di dati esistenti che appartengono al nuovo indice. Maggiore è il numero di valori di campo che corrispondono alla definizione dell'indice, maggiore è il tempo necessario per il riempimento dell'indice.
Le compilazioni degli indici sono operazioni di lunga durata .
Dopo aver avviato una build di indice, Cloud Firestore assegna all'operazione un nome univoco. I nomi delle operazioni hanno il prefisso projects/[PROJECT_ID]/databases/(default)/operations/
, ad esempio:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Tuttavia, si può tralasciare il prefisso quando si specifica un nome di operazione per la describe
comando.
Elenco di tutte le operazioni di lunga durata
Per elencare le operazioni di lunga durata, utilizza il comando gcloud firestore operations list . Questo comando elenca le operazioni in corso e quelle completate di recente. Le operazioni sono elencate per alcuni giorni dopo il completamento:
gcloud firestore operations list
Verificare lo stato di funzionamento
Invece di elencare tutte le operazioni di lunga durata, puoi elencare i dettagli di una singola operazione:
gcloud firestore operations describe operation-name
Stima del tempo di completamento
Durante l'esecuzione dell'operazione, vedere il valore del campo dello state
per lo stato generale dell'operazione.
Una richiesta per lo stato di un'operazione di lunga durata restituisce anche le metriche workEstimated
e workCompleted
. Queste metriche vengono restituite per il numero di documenti. workEstimated
mostra il numero totale stimato di documenti elaborati da un'operazione. workCompleted
mostra il numero di documenti elaborati finora. Al termine dell'operazione, workCompleted
riflette il numero totale di documenti effettivamente elaborati, che potrebbe essere diverso dal valore di workEstimated
.
Dividi il lavoro workCompleted
dal lavoro workEstimated
per una stima approssimativa dell'avanzamento. La stima potrebbe essere imprecisa perché dipende da un ritardo nella raccolta delle statistiche.
Ad esempio, ecco lo stato di avanzamento di una build di indice:
{ "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" } }, }, ...
Quando un'operazione viene eseguita, la descrizione dell'operazione conterrà "done": true
. Vedere il valore del campo dello state
per il risultato dell'operazione. Se il campo done
non è impostato nella risposta, il suo valore è false
. Non dipendere dall'esistenza del valore done
per le operazioni in corso.
Errori di costruzione dell'indice
È possibile che si verifichino errori di creazione dell'indice durante la gestione di indici compositi ed esenzioni per indici a campo singolo. Un'operazione di indicizzazione può non riuscire se Cloud Firestore rileva un problema con i dati che sta indicizzando. Più comunemente, questo significa che raggiungi un limite di indice . Ad esempio, l'operazione potrebbe aver raggiunto il numero massimo di voci di indice per documento.
Se la creazione dell'indice non riesce, viene visualizzato il messaggio di errore nella console. Dopo aver verificato di non raggiungere alcun limite di indice , riprova a eseguire l'operazione sull'indice.