Zarządzanie indeksami

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

Więcej informacji o indeksach Firestore Enterprise Edition 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 przyznać rolę, przeczytaj artykuł 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 móc tworzyć 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:

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

    Otwórz bazę danych Firestore

  2. Wybierz bazę danych z listy.
  3. Na karcie Indeksy kliknij Utwórz indeks.
  4. Wpisz Identyfikator kolekcji.
  5. Dodaj co najmniej 1 ścieżkę pola i wybierz dla każdej z nich opcję indeksu.
  6. Wybierz opcję obecności pola: niepełny lub pełny.
  7. Kliknij Utwórz.
  8. 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. Jeśli indeks nie zostanie utworzony, zapoznaj się z możliwymi przyczynami błędów podczas tworzenia indeksu.
gcloud CLI

Aby utworzyć indeks, użyj gcloud firestore indexes composite create polecenia.

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 niepełny, ustaw --density=sparse-any.

Aby utworzyć indeks unikalny, 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 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

Aby utworzyć indeks tekstowy, użyj konsoli Google Cloud.

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

    Otwórz bazy danych

  2. Wybierz bazę danych z listy.

  3. W menu nawigacyjnym kliknij Indeksy.

  4. Opcjonalnie: wpisz nazwę indeksu.

  5. Otwórz 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, a Cloud Firestore rozpocznie jego tworzenie. Gdy indeks zostanie utworzony, obok niego pojawi się zielony znacznik wyboru.

Tworzenie indeksu geoprzestrzennego

Aby utworzyć indeks geoprzestrzenny, użyj konsoli Google Cloud.

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

    Otwórz bazy danych

  2. Wybierz bazę danych z listy.

  3. W menu nawigacyjnym kliknij Indeksy.

  4. Opcjonalnie: wpisz nazwę indeksu.

  5. Otwórz Typ wyszukiwania i wybierz Geoprzestrzenny (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, a Cloud Firestore rozpocznie jego tworzenie. Gdy indeks zostanie utworzony, obok niego pojawi się zielony znacznik wyboru.

Usuwanie indeksu

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

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

    Otwórz bazę danych Firestore

  2. Wybierz bazę danych z listy.
  3. Kliknij kartę Indeksy.
  4. Na liście indeksów kliknij przycisk Więcej obok indeksu, który chcesz usunąć, i wybierz Usuń.
  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 to kilka minut, nawet w przypadku pustej bazy danych.

  • Czas potrzebny na wypełnienie wpisów indeksu zależy od tego, ile istniejących danych należy umieścić w nowym indeksie. Im więcej wartości pól pasuje do definicji indeksu, tym dłużej trwa wypełnianie wpisów indeksu.

Zarządzanie długo trwającymi operacjami

Tworzenie indeksu to długo trwająca operacja. W sekcjach poniżej opisujemy, jak pracować z długo trwającymi operacjami w przypadku indeksów.

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

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Podczas określania nazwy operacji w poleceniu describe możesz pominąć prefiks.

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

Aby wyświetlić listę długo trwających operacji, użyj gcloud firestore operations list polecenia. To polecenie wyświetla listę operacji w toku i ostatnio zakończonych. Operacje są wyświetlane przez kilka dni po 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 zakończenia

Podczas wykonywania operacji sprawdzaj wartość pola state field aby poznać ogólny stan operacji.

Prośba o stan długo trwającej operacji zwraca też dane workEstimated i workCompleted. workEstimated pokazuje szacunkową łączną liczbę dokumentów, które zostaną przetworzone przez operację. workCompleted pokazuje liczbę dokumentów, które zostały już przetworzone. Po zakończeniu operacji workCompleted odzwierciedla łączną liczbę dokumentów, które zostały faktycznie przetworzone. Może się ona różnić od wartości 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 wartości pola state Jeśli w odpowiedzi nie ma pola done, oznacza to, że operacja nie została zakończona.