Per scoprire di più sugli indici della versione Firestore Enterprise, consulta la panoramica degli indici.
Prima di iniziare
Prima di poter creare un indice in Cloud Firestore, assicurati che ti sia stato assegnato uno dei seguenti ruoli:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
Per concedere un ruolo, consulta Concedi un singolo ruolo. Per saperne di più sui ruoli Cloud Firestore e sulle autorizzazioni associate, consulta Ruoli predefiniti.
Se hai definito ruoli personalizzati, assegna tutte le seguenti autorizzazioni per creare indici:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Crea un indice
Per creare un indice, completa i seguenti passaggi:
Console Firebase
-
Nella console Firebase, vai alla pagina Database Firestore.
- Seleziona un database dall'elenco dei database.
- Nella scheda Indici, fai clic su Crea indice.
- Inserisci un ID raccolta.
- Aggiungi uno o più percorsi dei campi e seleziona un'opzione di indice per ciascuno.
- Seleziona un'opzione di presenza dei campi, non sparse o sparse.
- Fai clic su Crea.
- Il nuovo indice viene visualizzato nell'elenco degli indici e Cloud Firestore inizia a crearlo. Una volta creato l'indice, vedrai un segno di spunta verde accanto all'indice. Se l'indice non viene creato, consulta Errori di creazione dell'indice per conoscere le possibili cause.
gcloud CLI
Per creare un indice, utilizza il 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
Sostituisci quanto segue:
- DATABASE_ID: un ID database.
- COLLECTION: un nome per la raccolta.
- FIELD_CONFIGURATION: una configurazione di campo. Per ogni campo, aggiungi
--field-config=field-path=. Ad esempio:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descendingPer saperne di più sulla configurazione di questi campi, consulta
--field-config.
Per creare un indice sparse, imposta --density=sparse-any.
Per creare un indice univoco, aggiungi il flag --unique.
Terraform
Utilizza la risorsa 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" }
Sostituisci quanto segue:
- DATABASE_ID: l'ID database del database scelto
- COLLECTION: il nome della raccolta da indicizzare
- FIELD_PATH: il nome del campo da indicizzare
- ORDER:
ASCENDINGoDESCENDING - DENSITY:
SPARSE_ANYoDENSE
Crea un indice di testo
Per creare un indice di testo, completa i seguenti passaggi:
Console Google Cloud
-
Nella console Google Cloud, vai alla pagina Database.
- Seleziona un database dall'elenco dei database.
- Nel menu di navigazione, fai clic su Indici.
- (Facoltativo) Inserisci un nome per l'indice.
- Vai a Tipo di ricerca e seleziona Testo.
- Inserisci un ID raccolta.
- Configura uno o più campi da indicizzare.
- Imposta l'ambito di query per l'indice.
- Seleziona una lingua predefinita.
- (Facoltativo) Imposta un percorso di override della lingua su un nome di campo che contiene l'impostazione della lingua di un documento.
- Fai clic su Crea.
- Il nuovo indice viene visualizzato nell'elenco degli indici e Cloud Firestore inizia a crearlo. Una volta creato l'indice, accanto viene visualizzato un segno di spunta verde.
gcloud CLI
Per creare un indice di testo, utilizza il comando gcloud firestore indexes composite create:
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION_GROUP \ --field-config=field-path=FIELD_NAME,search-config='{"text-spec": {"index-specs": [{"index-type": "tokenized", "match-type": "match-globally"}]}}' \ --search-index-options=text-language=en \ --async
Sostituisci quanto segue:
- DATABASE_ID: un ID database.
- COLLECTION_GROUP: l'ID della raccolta da indicizzare.
- FIELD_NAME: il nome del campo da indicizzare.
Il flag --async esegue l'operazione di creazione dell'indice in background.
Crea un indice geospaziale
Per creare un indice geospaziale, completa i seguenti passaggi:
Console Google Cloud
-
Nella console Google Cloud, vai alla pagina Database.
- Seleziona un database dall'elenco dei database.
- Nel menu di navigazione, fai clic su Indici.
- (Facoltativo) Inserisci un nome per l'indice.
- Vai a Tipo di ricerca e seleziona Geo (2dsphere).
- Inserisci un ID raccolta.
- Configura uno o più campi da indicizzare.
- Imposta l'ambito di query per l'indice.
- Fai clic su Crea.
Il nuovo indice viene visualizzato nell'elenco degli indici e Cloud Firestore inizia a crearlo. Una volta creato l'indice, accanto viene visualizzato un segno di spunta verde.
gcloud CLI
Per creare un indice geospaziale, utilizza il comando gcloud firestore indexes composite create:
gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION_GROUP \
--field-config=field-path=FIELD_NAME,search-config='{"geo-spec": {}}' \
--asyncSostituisci quanto segue:
- DATABASE_ID: un ID database.
- COLLECTION_GROUP: l'ID della raccolta da indicizzare.
- FIELD_NAME: il nome del campo da indicizzare.
Il flag --async esegue l'operazione di creazione dell'indice in background.
Elimina un indice
Per eliminare un indice, completa i seguenti passaggi:
Console Firebase
-
Nella console Firebase, vai alla pagina Database Firestore.
- Seleziona un database dall'elenco dei database.
- Fai clic sulla scheda Indici.
- Nell'elenco degli indici, scegli Elimina dal pulsante Altro per l'indice che vuoi eliminare.
- Fai clic su Elimina indice.
gcloud CLI
Per trovare il nome dell'indice, utilizza il comando
gcloud firestore indexes composite list.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Sostituisci DATABASE_ID con l'ID del database.
-
Per eliminare l'indice, utilizza il comando
gcloud firestore indexes composite delete.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Sostituisci quanto segue:
- INDEX_NAME: il nome di un indice
- DATABASE_ID: un ID database
Tempo di creazione dell'indice
Per creare un indice, Cloud Firestore deve creare l'indice e poi eseguire il backfill delle voci dell'indice con i dati esistenti. Il tempo necessario per creare un indice è determinato da quanto segue:
Il tempo minimo di compilazione di un indice è di alcuni minuti, anche per un database vuoto.
Il tempo necessario per eseguire il backfill delle voci dell'indice dipende dalla quantità di dati esistenti che appartengono al nuovo indice. Più valori dei campi corrispondono alla definizione dell'indice, più tempo è necessario per eseguire il backfill delle voci dell'indice.
Gestione delle operazioni a lunga esecuzione
Le creazioni di indici sono operazioni a lunga esecuzione. Le sezioni seguenti descrivono come utilizzare le operazioni a lunga esecuzione per gli indici.
Dopo aver iniziato a creare un indice, Cloud Firestore assegna
all'operazione un nome univoco. I nomi delle operazioni sono preceduti dal prefisso projects/PROJECT_ID/databases/DATABASE_ID/operations/, ad esempio:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Puoi omettere il prefisso quando specifichi un nome di operazione per il comando describe.
Elenca tutte le operazioni a lunga esecuzione
Per elencare le operazioni a lunga esecuzione, utilizza il comando gcloud firestore operations list. Questo comando elenca le operazioni in corso e quelle completate di recente.
Le operazioni vengono elencate per alcuni giorni dopo il completamento:
gcloud firestore operations list
Controlla lo stato dell'operazione
Anziché elencare tutte le operazioni a lunga esecuzione, puoi elencare i dettagli di una singola operazione:
gcloud firestore operations describe operation-name
Stima del tempo di completamento
Durante l'esecuzione dell'operazione, controlla il valore del campo state per lo stato complessivo dell'operazione.
Una richiesta per lo stato di un'operazione a lunga esecuzione restituisce anche le metriche
workEstimated e workCompleted. workEstimated mostra il numero totale stimato di documenti che un'operazione elaborerà. 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.
Per stimare l'avanzamento di un'operazione, dividi workCompleted per workEstimated.
Di seguito è riportato un esempio dell'avanzamento della creazione di un 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"
}
},
},
...
Al termine di un'operazione, la descrizione dell'operazione conterrà "done": true. Controlla il valore del campo state per
il risultato dell'operazione. Se il campo done non è impostato nella risposta, l'operazione non è stata completata.