Informacje o definicji indeksu Cloud Firestore

Cloud Firestore automatycznie tworzy indeksy do obsługi najpopularniejszych typów zapytań, ale umożliwia definiowanie indeksów niestandardowych i zastąpienia indeksów zgodnie z opisem w przewodnikach Cloud Firestore .

Możesz tworzyć, modyfikować i wdrażać indeksy niestandardowe w konsoli Firebase lub za pomocą interfejsu CLI. W interfejsie CLI edytuj plik konfiguracyjny indeksu z domyślną nazwą pliku firestore.indexes.json i wdróż za pomocą polecenia firebase deploy .

Możesz eksportować indeksy za pomocą interfejsu CLI, używając firebase firestore:indexes .

Plik konfiguracyjny indeksu definiuje jeden obiekt zawierający tablicę indexes i opcjonalną tablicę fieldOverrides . Oto przykład:

{
  // Required, specify compound indexes
  indexes: [
    {
      collectionGroup: "posts",
      queryScope: "COLLECTION",
      fields: [
        { fieldPath: "author", arrayConfig: "CONTAINS" },
        { fieldPath: "timestamp", order: "DESCENDING" }
      ]
    }
  ],

  // 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: []
    }
  ]
}

Wdróż konfigurację indeksu

Wdróż konfigurację indeksu za pomocą polecenia firebase deploy . Jeśli chcesz wdrożyć indeksy tylko dla baz danych skonfigurowanych w projekcie, dodaj flagę --only firestore . Zobacz opis opcji tego polecenia .

Aby wyświetlić listę wdrożonych indeksów, uruchom komendę firebase firestore:indexes . Dodaj flagę --database=<databaseID> , aby wyświetlić indeksy dla bazy danych innej niż domyślna baza danych projektu.

Jeśli edytujesz indeksy za pomocą konsoli Firebase, pamiętaj o zaktualizowaniu także lokalnego pliku indeksów. Więcej informacji na temat zarządzania indeksami znajdziesz w przewodnikach Cloud Firestore .

formacie JSON

Indeksy

Schemat jednego obiektu w tablicy indexes jest następujący. Opcjonalne właściwości są identyfikowane za pomocą ? postać.

Należy pamiętać, że pola dokumentów Cloud Firestore można indeksować tylko w jednym trybie, dlatego obiekt pola nie może zawierać jednocześnie właściwości order i arrayConfig .

  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 property
    arrayConfig?: string   // If this parameter used, must be "CONTAINS"; excludes order property

Przesłonięcia pola

Schemat dla jednego obiektu w tablicy fieldOverrides jest następujący. Opcjonalne właściwości są identyfikowane za pomocą ? postać.

Należy pamiętać, że pola dokumentów Cloud Firestore można indeksować tylko w jednym trybie, dlatego obiekt pola nie może zawierać jednocześnie właściwości order i 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

Polityka TTL

Zasadę TTL można włączyć lub wyłączyć za pomocą tablicy fieldOverrides w następujący sposób:

  // 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: []
    }
  ]

Aby zachować domyślne indeksowanie w polu i włączyć zasadę TTL:

{
  "fieldOverrides": [
    {
      "collectionGroup": "yourCollectionGroup",
      "fieldPath": "yourFieldPath",
      "ttl": true,
      "indexes": [
        { "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
        { "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
        { "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
      ]
    }
  ]
}

Więcej informacji na temat zasad dotyczących czasu wygaśnięcia (TTL) można znaleźć w oficjalnej dokumentacji .