Zarządzanie indeksami

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

Więcej informacji o indeksach 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

Aby dowiedzieć się, jak przyznać rolę, przeczytaj artykuł o przyznawaniu pojedynczej roli. Więcej informacji o rolach Cloud Firestore i powiązanych z nimi uprawnieniach znajdziesz w artykule o rolach zdefiniowanych.

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 1 ścieżkę pola i wybierz opcję indeksu dla każdej z nich.
  6. Wybierz opcję obecności pola: nierozproszone lub rozproszone.
  7. Kliknij Utwórz.
  8. Nowy indeks pojawi się na liście indeksów, a Cloud Firestore rozpocznie jego tworzenie. Gdy indeks zostanie utworzony, pojawi się obok niego zielony znacznik wyboru. Jeśli indeks nie zostanie utworzony, zapoznaj się z artykułem Błędy podczas 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 każdym polu 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 rozproszony, ustaw --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 wybranej bazy danych.
  • COLLECTION: nazwa kolekcji do zindeksowania.
  • FIELD_PATH: nazwa pola do zindeksowania.
  • ORDER: ASCENDING lub DESCENDING
  • DENSITY: SPARSE_ANY lub DENSE

Tworzenie indeksu tekstowego

Aby utworzyć indeks tekstowy, wykonaj te czynności:

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

    Otwórz stronę 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 jedno 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, a Cloud Firestore rozpocznie jego tworzenie. Po utworzeniu indeksu obok niego pojawi się zielony znacznik wyboru.
gcloud CLI

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

Zastąp następujące elementy:

  • DATABASE_ID: identyfikator bazy danych.
  • COLLECTION_GROUP: identyfikator kolekcji do zindeksowania.
  • FIELD_NAME: nazwa pola do zindeksowania.

Flaga --async powoduje, że operacja tworzenia indeksu jest wykonywana w tle.

Tworzenie indeksu geoprzestrzennego

Aby utworzyć indeks geoprzestrzenny, wykonaj te czynności:

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

    Otwórz stronę Bazy danych

  2. Wybierz bazę danych z listy baz danych.
  3. W menu nawigacyjnym kliknij Indeksy.
  4. Opcjonalnie: wpisz nazwę indeksu.
  5. Przejdź do sekcji Search Type (Typ wyszukiwania) i wybierz Geo (2dsphere).
  6. Wpisz identyfikator kolekcji.
  7. Skonfiguruj co najmniej jedno pole do indeksowania.
  8. Ustaw zakres zapytania dla indeksu.
  9. Kliknij Utwórz.

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

gcloud CLI

Aby utworzyć indeks geoprzestrzenny, użyj polecenia 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": {}}' \
  --async

Zastąp następujące elementy:

  • DATABASE_ID: identyfikator bazy danych.
  • COLLECTION_GROUP: identyfikator kolekcji do zindeksowania.
  • FIELD_NAME: nazwa pola do zindeksowania.

Flaga --async powoduje, że operacja tworzenia indeksu jest wykonywana w tle.

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 przycisk Więcej  i wybierz Usuń 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 tworzenia indeksu

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

  • Minimalny czas tworzenia 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 należą do nowego indeksu. 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ługo trwająca operacja. W poniższych sekcjach opisujemy, jak pracować z długo trwającymi operacjami na indeksach.

Gdy zaczniesz tworzyć indeks, Cloud Firestore przypisze operacji unikalną nazwę. Nazwy operacji są poprzedzone prefiksem projects/PROJECT_ID/databases/DATABASE_ID/operations/, na przykład:

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Możesz pominąć prefiks, gdy podajesz nazwę operacji w poleceniu describe.

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

Aby wyświetlić listę długo trwających operacji, użyj polecenia gcloud firestore operations list. To polecenie wyświetla listę trwających i ostatnio 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 pojedynczej operacji:

gcloud firestore operations describe operation-name

Szacowanie czasu ukończenia

Podczas wykonywania operacji możesz sprawdzić wartość pola state, aby poznać ogólny stan operacji.

Żądanie stanu długo trwającej operacji zwraca też dane workEstimated i workCompleted. workEstimated pokazuje szacowaną łączną liczbę dokumentów, które zostaną przetworzone w ramach operacji. workCompleted pokazuje liczbę dokumentów przetworzonych do tej pory. Po zakończeniu operacji workCompleted odzwierciedla łączną liczbę dokumentów, które zostały faktycznie przetworzone. Może ona 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. Wynik operacji znajdziesz w polu state. Jeśli w odpowiedzi nie ma pola done, operacja nie została zakończona.