Utwórz brakujący indeks za pomocą komunikatu o błędzie
Jeśli spróbujesz wykonać zapytanie złożone z klauzulą zakresu, która nie jest mapowana na istniejący indeks, pojawi się błąd. Komunikat o błędzie zawiera bezpośredni link do utworzenia brakującego indeksu w konsoli Firebase.
Kliknij wygenerowany link do konsoli Firebase, przejrzyj automatycznie wypełnione informacje i kliknij Utwórz .
Użyj konsoli Firebase
Aby ręcznie utworzyć nowy indeks z konsoli Firebase:
- Przejdź do sekcji Cloud Firestore w konsoli Firebase .
- Przejdź do zakładki Indeksy i kliknij Dodaj indeks .
- Wpisz nazwę kolekcji i ustaw pola, według których chcesz uporządkować indeks.
- Kliknij Utwórz .
Tworzenie indeksów może potrwać kilka minut, w zależności od rozmiaru zapytania. Po ich utworzeniu możesz zobaczyć swoje indeksy i ich status w sekcji Indeksy złożone. Jeśli nadal budują, konsola Firebase zawiera pasek stanu budynku.
Usuń indeksy
Aby usunąć indeks:
- Przejdź do sekcji Cloud Firestore w konsoli Firebase .
- Kliknij kartę Indeksy .
- Najedź kursorem na indeks, który chcesz usunąć, i wybierz Usuń z menu kontekstowego.
- Potwierdź, że chcesz go usunąć, klikając Usuń z alertu.
Użyj interfejsu wiersza polecenia Firebase
Indeksy można również wdrażać za pomocą interfejsu Firebase CLI . Aby rozpocząć, uruchom firebase init firestore
w katalogu projektu. Podczas konfiguracji Firebase CLI generuje plik JSON z domyślnymi indeksami w poprawnym formacie. Edytuj plik, aby dodać więcej indeksów, i wdróż go za pomocą polecenia firebase deploy
. Jeśli chcesz wdrażać tylko indeksy, dodaj --only firestore:indexes
. Jeśli edytujesz indeksy za pomocą konsoli Firebase, pamiętaj, aby zaktualizować również lokalny plik indeksów. Zapoznaj się z dokumentacją dotyczącą definicji indeksu JSON .
Czas kompilacji indeksu
Aby zbudować indeks, Cloud Firestore musi go skonfigurować, a następnie uzupełnić indeks istniejącymi danymi. Czas budowy indeksu to suma czasu konfiguracji i czasu uzupełniania:
Konfiguracja indeksu zajmuje kilka minut. Minimalny czas kompilacji indeksu to kilka minut, nawet w przypadku pustej bazy danych.
Czas uzupełniania zależy od tego, ile istniejących danych należy do nowego indeksu. Im więcej wartości pól jest zgodnych z definicją indeksu, tym dłużej trwa wypełnianie indeksu.
Kompilacje indeksu to długotrwałe operacje .
Po uruchomieniu budowania indeksu Cloud Firestore przypisuje operacji unikalną nazwę. Nazwy operacji mają przedrostek projects/[PROJECT_ID]/databases/(default)/operations/
, na przykład:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Można jednak pominąć prefiks podczas określania nazwy operacji dla polecenia describe
.
Lista wszystkich długotrwałych operacji
Aby wyświetlić listę długotrwałych operacji, użyj polecenia listy operacji gcloud firestore . To polecenie wyświetla listę trwających i ostatnio zakończonych operacji. Operacje są wymienione przez kilka dni po zakończeniu:
gcloud firestore operations list
Sprawdź stan pracy
Zamiast wymieniać wszystkie długotrwałe operacje, możesz wyświetlić szczegóły pojedynczej operacji:
gcloud firestore operations describe operation-name
Szacowanie czasu realizacji
W trakcie wykonywania operacji sprawdź wartość pola state
, aby uzyskać ogólny stan operacji.
Żądanie stanu długotrwałej operacji zwraca również metryki workEstimated
i workCompleted
. Te metryki są zwracane dla liczby dokumentów. workEstimated
pokazuje szacowaną łączną liczbę dokumentów, które przetworzy operacja. workCompleted
pokazuje liczbę dokumentów przetworzonych do tej pory. Po zakończeniu operacji workCompleted
odzwierciedla łączną liczbę faktycznie przetworzonych dokumentów, która może różnić się od wartości workEstimated
.
Podziel workCompleted
przez workEstimated
dla przybliżonego oszacowania postępu. Oszacowanie może być niedokładne, ponieważ zależy od opóźnionego zbierania statystyk.
Na przykład, oto stan postępu budowania 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 wykonaniu operacji opis operacji będzie zawierał "done": true
. Zobacz wartość pola state
dla wyniku operacji. Jeśli pole done
nie jest ustawione w odpowiedzi, to jego wartość to false
. Nie polegaj na istnieniu wartości done
dla operacji w toku.
Błędy budowania indeksu
Podczas zarządzania indeksami złożonymi i wyłączeniami indeksów jednopolowych mogą wystąpić błędy budowania indeksu. Operacja indeksowania może się nie powieść, jeśli Cloud Firestore napotka problem z indeksowanymi danymi. Najczęściej oznacza to osiągnięcie limitu indeksu . Na przykład operacja mogła osiągnąć maksymalną liczbę wpisów indeksu na dokument.
Jeśli tworzenie indeksu nie powiedzie się, w konsoli zostanie wyświetlony komunikat o błędzie. Po upewnieniu się, że nie osiągasz żadnych limitów indeksowania , ponów operację indeksowania.