Zarządzanie indeksami

Na tej stronie dowiesz się, jak zarządzać indeksami w Firestore w wersji Enterprise.

Więcej informacji o indeksach w wersji Firestore Enterprise znajdziesz w artykule Omówienie indeksów.

Zanim zaczniesz

Zanim utworzysz indeks w Cloud Firestore, upewnij się, że masz przypisaną jedną z tych ról:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

Informacje o przyznawaniu ról znajdziesz w artykule Przyznawanie pojedynczej roli. Więcej informacji o rolach Cloud Firestore i powiązanych z nimi uprawnieniach znajdziesz w artykule Wstępnie zdefiniowane role.

Jeśli masz zdefiniowane role niestandardowe, przypisz wszystkie te uprawnienia, aby utworzyć indeksy:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

Utwórz indeks

Aby utworzyć indeks, wykonaj te czynności:

Konsola Firebase
  1. W konsoli Firebase otwórz stronę Baza danych Firestore.

    Otwórz bazę danych Firestore

  2. Wybierz bazę danych z listy baz danych.
  3. Na karcie Indeksy kliknij Utwórz indeks.
  4. Wpisz identyfikator kolekcji.
  5. Dodaj co najmniej jedną ścieżkę pola i wybierz dla każdej z nich opcję indeksu.
  6. Wybierz opcję obecności pola: nie rzadkie lub rzadkie.
  7. Kliknij Utwórz.
  8. Nowy indeks pojawi się na liście indeksów i Cloud Firestorerozpocznie się jego tworzenie. Gdy indeks zostanie utworzony, obok niego pojawi się zielona ikona potwierdzenia. Jeśli indeks nie zostanie utworzony, zapoznaj się z sekcją Błędy tworzenia indeksu, aby poznać możliwe przyczyny.
gcloud CLI

Aby utworzyć indeks, użyj polecenia 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

Zastąp następujące elementy:

  • DATABASE_ID: identyfikator bazy danych.
  • COLLECTION: nazwa kolekcji.
  • FIELD_CONFIGURATION: konfiguracja pola. W przypadku każdego pola dodaj --field-config=field-path=. Przykład:
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    Więcej informacji o konfigurowaniu tych pól znajdziesz w artykule --field-config.

Aby utworzyć indeks rzadki, ustaw wartość --density=sparse-any.

Aby utworzyć unikalny indeks, dodaj flagę --unique.

Terraform

Użyj zasobu 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"
}

Zastąp następujące elementy:

  • DATABASE_ID: identyfikator bazy danych wybranej przez Ciebie bazy danych.
  • COLLECTION: nazwa kolekcji do indeksowania.
  • FIELD_PATH: nazwa pola do indeksowania
  • ORDER: jedna z wartości ASCENDING lub DESCENDING
  • DENSITY: jedna z wartości SPARSE_ANY lub DENSE

Tworzenie indeksu tekstowego

Utwórz indeks tekstowy za pomocą konsoli Google Cloud.

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz Bazy danych

  2. Wybierz bazę danych z listy baz danych.

  3. W menu nawigacyjnym kliknij Indeksy.

  4. Opcjonalnie wpisz nazwę indeksu.

  5. Kliknij Typ wyszukiwania i wybierz Tekst.

  6. Wpisz identyfikator kolekcji.

  7. Skonfiguruj co najmniej 1 pole do indeksowania.

  8. Ustaw zakres zapytania dla indeksu.

  9. Wybierz język domyślny.

  10. Opcjonalnie: ustaw ścieżkę zastąpienia języka na nazwę pola, które zawiera ustawienie języka dokumentu.

  11. Kliknij Utwórz.

  12. Nowy indeks pojawi się na liście indeksów i Cloud Firestorerozpocznie się jego tworzenie. Gdy indeks zostanie utworzony, obok niego pojawi się zielony znacznik wyboru.

Tworzenie indeksu geoprzestrzennego

Utwórz indeks geoprzestrzenny za pomocą konsoli Google Cloud.

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz Bazy danych

  2. Wybierz bazę danych z listy baz danych.

  3. W menu nawigacyjnym kliknij Indeksy.

  4. Opcjonalnie wpisz nazwę indeksu.

  5. Kliknij Typ wyszukiwania i wybierz Geo (2dsphere).

  6. Wpisz identyfikator kolekcji.

  7. Skonfiguruj co najmniej 1 pole do indeksowania.

  8. Ustaw zakres zapytania dla indeksu.

  9. Kliknij Utwórz.

    Nowy indeks pojawi się na liście indeksów i Cloud Firestorerozpocznie się jego tworzenie. Gdy indeks zostanie utworzony, obok niego pojawi się zielony znacznik wyboru.

Usuwanie indeksu

Aby usunąć indeks, wykonaj te czynności:

Konsola Firebase
  1. W konsoli Firebase otwórz stronę Baza danych Firestore.

    Otwórz bazę danych Firestore

  2. Wybierz bazę danych z listy baz danych.
  3. Kliknij kartę Indeksy.
  4. Na liście indeksów kliknij Usuń na przycisku Więcej obok indeksu, który chcesz usunąć.
  5. Kliknij Usuń indeks.
gcloud CLI
  1. Aby znaleźć nazwę indeksu, użyj polecenia gcloud firestore indexes composite list.

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

    Zastąp DATABASE_ID identyfikatorem bazy danych.

  2. Aby usunąć indeks, użyj polecenia gcloud firestore indexes composite delete.

    gcloud firestore indexes composite delete INDEX_NAME \
    --database='DATABASE_ID'

    Zastąp następujące elementy:

    • INDEX_NAME: nazwa indeksu
    • DATABASE_ID: identyfikator bazy danych

Czas kompilacji indeksu

Aby utworzyć indeks, Cloud Firestore musi go utworzyć, a następnie wypełnić wpisy indeksu istniejącymi danymi. Czas potrzebny na utworzenie indeksu zależy od tych czynników:

  • Minimalny czas kompilacji indeksu wynosi kilka minut, nawet w przypadku pustej bazy danych.

  • Czas potrzebny na uzupełnienie wpisów indeksu zależy od ilości istniejących danych, które powinny znajdować się w nowym indeksie. Im więcej wartości pól pasuje do definicji indeksu, tym dłużej trwa uzupełnianie wpisów indeksu.

Zarządzanie długo trwającymi operacjami

Tworzenie indeksów to długotrwałe operacje. W sekcjach poniżej opisujemy, jak pracować z długotrwałymi operacjami w przypadku indeksów.

Po rozpoczęciu tworzenia indeksu Cloud Firestore przypisuje operacji unikalną nazwę. Nazwy operacji mają prefiks projects/PROJECT_ID/databases/DATABASE_ID/operations/, np.:

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Podczas określania nazwy operacji dla polecenia describe możesz pominąć prefiks.

Wyświetlanie listy wszystkich długo trwających operacji

Aby wyświetlić listę długotrwałych operacji, użyj polecenia gcloud firestore operations list. To polecenie wyświetla listę trwających i niedawno zakończonych operacji. Operacje są wyświetlane przez kilka dni po ich zakończeniu:

gcloud firestore operations list

Sprawdzanie stanu operacji

Zamiast wyświetlać listę wszystkich długo trwających operacji, możesz wyświetlić szczegóły jednej operacji:

gcloud firestore operations describe operation-name

Szacowanie czasu ukończenia

Podczas działania operacji sprawdzaj wartość pola state, aby poznać ogólny stan operacji.

Żądanie stanu długo trwającej operacji zwraca też dane workEstimatedworkCompleted. workEstimated – szacunkowa łączna liczba dokumentów, które zostaną przetworzone w ramach operacji. workCompleted wyświetla liczbę przetworzonych do tej pory dokumentów. Po zakończeniu operacji wartość workCompleted odzwierciedla łączną liczbę przetworzonych dokumentów, która może być inna niż wartość workEstimated.

Aby oszacować postęp operacji, podziel workCompleted przez workEstimated.

Oto przykład postępu tworzenia indeksu:

{
  "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"
        }
       },
    },
    ...

Po zakończeniu operacji jej opis będzie zawierać "done": true. Sprawdź wartość pola state, aby poznać wynik operacji. Jeśli w odpowiedzi nie ma pola done, oznacza to, że operacja nie została ukończona.