Indexe verwalten

Auf dieser Seite wird beschrieben, wie Sie Ihre Indexe für die Firestore Enterprise Edition verwalten.

Weitere Informationen zu Firestore Enterprise Edition-Indexen 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.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/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.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

Index erstellen

So erstellen Sie einen Index:

Firebase Konsole
  1. Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.

    Zur Firestore-Datenbank

  2. Wählen Sie in der Liste der Datenbanken eine Datenbank aus.
  3. Klicken Sie auf dem Tab Indexe auf Index erstellen.
  4. Geben Sie eine Sammlungs-ID ein.
  5. Fügen Sie einen oder mehrere Feldpfade hinzu und wählen Sie für jeden eine Indexoption aus.
  6. Wählen Sie eine Option für die Feldpräsenz aus, entweder „Nicht spärlich“ oder „Spärlich“.
  7. Klicken Sie auf Erstellen.
  8. Ihr neuer Index wird in der Liste der Indexe angezeigt und Cloud Firestore beginnt mit der Erstellung des Index. Wenn der Index erstellt wurde, wird neben dem Index ein grünes Häkchen angezeigt. Wenn der Index nicht erstellt wird, 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=descending
        

    Weitere 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 ASCENDING oder DESCENDING
  • DENSITY: Einer der Werte SPARSE_ANY oder DENSE

Textindex erstellen

Verwenden Sie die Google Cloud Console, um einen Textindex zu erstellen.

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie in der Liste der Datenbanken eine Datenbank aus.

  3. Klicken Sie im Navigationsmenü auf Indexe.

  4. Optional: Geben Sie einen Namen für den Index ein.

  5. Gehen Sie zu Suchtyp und wählen Sie Text aus.

  6. Geben Sie eine Sammlungs-ID ein.

  7. Konfigurieren Sie ein oder mehrere Felder für die Indexierung.

  8. Legen Sie den Abfragebereich für den Index fest.

  9. Wählen Sie eine Standardsprache aus.

  10. Optional: Legen Sie einen Pfad für die Sprachüberschreibung auf einen Feldnamen fest, der die Spracheinstellung eines Dokuments enthält.

  11. Klicken Sie auf Erstellen.

  12. Ihr neuer Index wird in der Liste der Indexe angezeigt und Cloud Firestore beginnt mit der Erstellung des Index. Wenn der Index erstellt wurde, wird neben dem Index ein grünes Häkchen angezeigt.

Geospatialen Index erstellen

Verwenden Sie die Google Cloud Console, um einen geospatialen Index zu erstellen.

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie in der Liste der Datenbanken eine Datenbank aus.

  3. Klicken Sie im Navigationsmenü auf Indexe.

  4. Optional: Geben Sie einen Namen für den Index ein.

  5. Gehen Sie zu Suchtyp und wählen Sie Geo (2dsphere) aus.

  6. Geben Sie eine Sammlungs-ID ein.

  7. Konfigurieren Sie ein oder mehrere Felder für die Indexierung.

  8. Legen Sie den Abfragebereich für den Index fest.

  9. 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, wird neben dem Index ein grünes Häkchen angezeigt.

Index löschen

So löschen Sie einen Index:

Firebase Konsole
  1. Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.

    Zur Firestore-Datenbank

  2. Wählen Sie in der Liste der Datenbanken eine Datenbank aus.
  3. Klicken Sie auf den Tab Indexe.
  4. 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.
  5. Klicken Sie auf Index löschen.
gcloud CLI
  1. Verwenden Sie den gcloud firestore indexes composite list Befehl, um den Namen des Index zu finden.

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    Ersetzen Sie DATABASE_ID durch die Datenbank-ID.

  2. Verwenden Sie den gcloud firestore indexes composite delete Befehl, 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

Index-Build-Dauer

Zum Erstellen eines Index muss Cloud Firestore den Index erstellen und die Indexeinträge anschließend mit vorhandenen Daten auffüllen. Die Zeit, die zum Erstellen eines Index benötigt wird, hängt von Folgendem ab:

  • Die Mindestdauer für die Erstellung eines Index beträgt einige Minuten, auch für eine leere Datenbank.

  • Die Zeit, die zum Auffü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 befü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 von Vorgängen mit langer Ausführungszeit 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 gibt die geschätzte Gesamtzahl der Dokumente an, die ein Vorgang verarbeitet. 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.

Hier 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, ist der Vorgang noch nicht abgeschlossen.