Weitere Informationen zu Indexen in der Firestore Enterprise Edition finden Sie unter Übersicht über Indexe.
Hinweis
Bevor Sie einen Index in Cloud Firestore erstellen können, muss Ihnen eine der folgenden Rollen zugewiesen sein:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
Informationen zum Zuweisen einer Rolle finden Sie unter Einzelne Rolle zuweisen. Weitere Informationen zu Cloud Firestore Rollen und den zugehörigen Berechtigungen finden Sie unter Vordefinierte Rollen.
Wenn Sie benutzerdefinierte Rollen definiert haben, weisen Sie alle folgenden Berechtigungen zu, um Indexe zu erstellen:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Index erstellen
So erstellen Sie einen Index:
Firebase Konsole
-
Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.
- Wählen Sie in der Liste der Datenbanken eine Datenbank aus.
- Klicken Sie auf dem Tab Indexe auf Index erstellen.
- Geben Sie eine Sammlungs-ID ein.
- Fügen Sie einen oder mehrere Feldpfade hinzu und wählen Sie für jeden eine Indexoption aus.
- Wählen Sie eine Option für die Feldpräsenz aus: „Nicht spärlich“ oder „Spärlich“.
- Klicken Sie auf Erstellen.
- Ihr neuer Index wird in der Liste der Indexe angezeigt und Cloud Firestore beginnt mit der Erstellung des Index. Wenn der Index erstellt wurde, sehen Sie neben dem Index ein grünes Häkchen. Wenn der Index nicht erstellt wurde, finden Sie unter Fehler beim Erstellen von Indexen mögliche Ursachen.
gcloud CLI
Verwenden Sie den
gcloud firestore indexes composite create
Befehl, um einen Index zu erstellen.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense
Ersetzen Sie Folgendes:
- DATABASE_ID: eine Datenbank-ID.
- COLLECTION: ein Sammlungsname.
- FIELD_CONFIGURATION: eine Feldkonfiguration. Fügen Sie für jedes Feld
--field-config=field-path=hinzu. Beispiel:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descendingWeitere Informationen zum Konfigurieren dieser Felder finden Sie unter
--field-config.
Setzen Sie --density=sparse-any, um einen spärlichen Index zu erstellen.
Fügen Sie das Flag --unique hinzu, um einen eindeutigen Index zu erstellen.
Terraform
Verwenden Sie die
google_firestore_index
Ressource.
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" }
Ersetzen Sie Folgendes:
- DATABASE_ID: Die Datenbank-ID für die ausgewählte Datenbank
- COLLECTION: Der Name der zu indexierenden Sammlung
- FIELD_PATH: Der Name des zu indexierenden Felds
- ORDER: Einer der Werte
ASCENDINGoderDESCENDING - DENSITY: Einer der Werte
SPARSE_ANYoderDENSE
Index löschen
So löschen Sie einen Index:
Firebase Konsole
-
Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.
- Wählen Sie in der Liste der Datenbanken eine Datenbank aus.
- Klicken Sie auf den Tab Indexe.
- Wählen Sie in der Liste der Indexe für den Index, den Sie löschen möchten, über die Schaltfläche Mehr die Option Löschen aus.
- Klicken Sie auf Index löschen.
gcloud CLI
Verwenden Sie den
gcloud firestore indexes composite listBefehl, um den Namen des Index zu ermitteln.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Ersetzen Sie DATABASE_ID durch die Datenbank-ID.
-
Verwenden Sie den
gcloud firestore indexes composite deleteBefehl, um den Index zu löschen.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Ersetzen Sie Folgendes:
- INDEX_NAME: der Name eines Index
- DATABASE_ID: eine Datenbank-ID
Indexerstellungszeit
Zum Erstellen eines Index muss Cloud Firestore den Index erstellen und anschließend die Indexeinträge mit vorhandenen Daten füllen. Die Zeit, die zum Erstellen eines Index benötigt wird, hängt von den folgenden Faktoren ab:
Die Mindestdauer für die Erstellung eines Index beträgt einige Minuten, auch für eine leere Datenbank.
Die Zeit, die zum Füllen von Indexeinträgen benötigt wird, hängt davon ab, wie viele vorhandene Daten in den neuen Index gehören. Je mehr Feldwerte mit der Indexdefinition übereinstimmen, desto länger dauert es, bis die Indexeinträge gefüllt sind.
Vorgänge mit langer Ausführungszeit verwalten
Index-Builds sind Vorgänge mit langer Ausführungszeit. In den folgenden Abschnitten wird beschrieben, wie Sie mit Vorgängen mit langer Ausführungszeit für Indexe arbeiten.
Nachdem Sie mit der Erstellung eines Index begonnen haben, weist Cloud Firestore dem Vorgang einen eindeutigen Namen zu. Vorgangsnamen haben das Präfix projects/PROJECT_ID/databases/DATABASE_ID/operations/,
zum Beispiel:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Wenn Sie für den Befehl describe einen Vorgangsnamen angeben, können Sie das Präfix weglassen.
Alle Vorgänge mit langer Ausführungszeit auflisten
Verwenden Sie zum Auflisten lang andauernder Vorgänge den
gcloud firestore operations list
Befehl. Dieser Befehl listet laufende und kürzlich abgeschlossene Vorgänge auf.
Die Vorgänge sind nach Abschluss einige Tage lang in der Liste enthalten:
gcloud firestore operations list
Vorgangsstatus prüfen
Anstelle aller Vorgänge mit langer Ausführungszeit können Sie auch die Details eines einzelnen Vorgangs auflisten:
gcloud firestore operations describe operation-name
Fertigstellungszeit schätzen
Während der Ausführung eines Vorgangs wird im Feld state der Gesamtstatus des Vorgangs angezeigt.
Eine Anfrage für den Status eines Vorgangs mit langer Ausführungszeit gibt auch die Messwerte workEstimated und workCompleted zurück. workEstimated zeigt die geschätzte Gesamtzahl der Dokumente an, die von einem Vorgang verarbeitet werden. workCompleted
gibt die Anzahl der bisher verarbeiteten Dokumente an. Nach Abschluss des Vorgangs gibt workCompleted die Gesamtzahl der tatsächlich verarbeiteten Dokumente wieder, die sich vom Wert von workEstimated unterscheiden können.
Um den Fortschritt eines Vorgangs zu schätzen, teilen Sie workCompleted durch workEstimated.
Im Folgenden sehen Sie ein Beispiel für den Fortschritt der Erstellung eines Index:
{
"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"
}
},
},
...
Wenn ein Vorgang abgeschlossen ist, enthält die Vorgangsbeschreibung
"done": true. Sehen Sie sich den Wert des Feldes state für
das Ergebnis des Vorgangs an. Wenn das Feld done in der Antwort nicht festgelegt ist, wurde der Vorgang noch nicht abgeschlossen.