Usuwanie i ponowne kompilowanie indeksu w usłudze Azure AI Search

W tym artykule wyjaśniono, jak usunąć i ponownie skompilować indeks usługi Azure AI Search. Wyjaśnia on okoliczności, w których są wymagane ponowne kompilacje, i udostępnia zalecenia dotyczące ograniczania skutków ponownego kompilowania bieżących żądań zapytań. Jeśli konieczne jest częste ponowne kompilowanie, zalecamy użycie aliasów indeksu , aby ułatwić zamianę indeksu wskazującego aplikację.

Podczas aktywnego programowania często porzucanie i ponowne kompilowanie indeksów podczas iteracji nad projektem indeksu. Większość deweloperów współpracuje z małą reprezentatywną próbką swoich danych, aby ponowne indeksowanie przebiegało szybciej.

Modyfikacje wymagające ponownego kompilowanie

W poniższej tabeli wymieniono modyfikacje, które wymagają upuszczania i ponownego kompilowania indeksu.

Akcja opis
Usuwanie pola Aby fizycznie usunąć wszystkie ślady pola, należy ponownie skompilować indeks. Gdy natychmiastowa ponowna kompilacja nie jest praktyczna, można zmodyfikować kod aplikacji, aby przekierować dostęp z dala od przestarzałego pola lub użyć pola wyszukiwania , a następnie wybrać parametry zapytania, aby wybrać pola, które są przeszukiwane i zwracane. Fizycznie definicja i zawartość pola pozostają w indeksie do momentu następnego ponownego skompilowania, po zastosowaniu schematu, który pomija pole, którego dotyczy.
Zmienianie definicji pola Poprawki nazwy pola, typu danych lub określonych atrybutów indeksu (z możliwością wyszukiwania, filtrowania, sortowania, tworzenia aspektów) wymagają pełnej kompilacji.
Przypisywanie analizatora do pola Analizatory są definiowane w indeksie, przypisywane do pól, a następnie wywoływane podczas indeksowania w celu informowania o tworzeniu tokenów. W dowolnym momencie można dodać nową definicję analizatora do indeksu, ale można przypisać tylko analizator po utworzeniu pola. Dotyczy to zarówno właściwości analyzer , jak i indexAnalyzer . Właściwość searchAnalyzer jest wyjątkiem (tę właściwość można przypisać do istniejącego pola).
Aktualizowanie lub usuwanie definicji analizatora w indeksie Nie można usunąć ani zmienić istniejącej konfiguracji analizatora (analizatora, tokenizatora, filtru tokenu lub filtru znaków) w indeksie, chyba że ponownie skompilujesz cały indeks.
Dodawanie pola do sugestora Jeśli pole już istnieje i chcesz dodać je do konstrukcji sugestorów , skompiluj indeks.
Przełączanie warstw Uaktualnienia w miejscu nie są obsługiwane. Jeśli potrzebujesz większej pojemności, utwórz nową usługę i od podstaw skompiluj indeksy. Aby zautomatyzować ten proces, możesz użyć przykładowego kodu index-backup-restore w tym repozytorium przykładowym usługi Azure AI Search .NET. Ta aplikacja utworzy kopię zapasową indeksu w serii plików JSON, a następnie ponownie utworzy indeks w określonej usłudze wyszukiwania.

Modyfikacje bez konieczności ponownego kompilowanie

Wiele innych modyfikacji można wprowadzić bez wpływu na istniejące struktury fizyczne. W szczególności następujące zmiany nie wymagają ponownego kompilowania indeksu. W przypadku tych zmian możesz zaktualizować istniejącą definicję indeksu przy użyciu zmian.

  • Dodaj nowe pole
  • Ustawianie atrybutu możliwego do pobrania w istniejącym polu
  • Aktualizowanie elementu searchAnalyzer w polu o istniejącym indeksieAnalyzer
  • Dodawanie nowej definicji analizatora w indeksie (które można zastosować do nowych pól)
  • Dodawanie, aktualizowanie lub usuwanie profilów oceniania
  • Dodawanie, aktualizowanie lub usuwanie ustawień mechanizmu CORS
  • Dodawanie, aktualizowanie lub usuwanie synonimów Mapy
  • Dodawanie, aktualizowanie lub usuwanie konfiguracji semantycznych

Po dodaniu nowego pola istniejące indeksowane dokumenty otrzymują wartość null dla nowego pola. W przypadku przyszłego odświeżania danych wartości z danych zewnętrznych źródła zastępują wartości null dodane przez usługę Azure AI Search. Aby uzyskać więcej informacji na temat aktualizowania zawartości indeksu, zobacz Dodawanie, aktualizowanie lub usuwanie dokumentów.

Jak ponownie skompilować indeks

Podczas opracowywania schemat indeksu często się zmienia. Można go zaplanować, tworząc indeksy, które można usunąć, ponownie utworzyć i szybko załadować za pomocą małego reprezentatywnego zestawu danych.

W przypadku aplikacji już w środowisku produkcyjnym zalecamy utworzenie nowego indeksu uruchamianego obok siebie istniejącego indeksu, aby uniknąć przestojów zapytań. Kod aplikacji zapewnia przekierowanie do nowego indeksu.

  1. Sprawdź miejsce. usługa wyszukiwania podlegają maksymalnej liczbie indeksów, różniąc się w zależności od warstwy usług. Upewnij się, że masz miejsce na drugi indeks.

  2. Ustal, czy jest wymagana ponowna kompilacja. Jeśli po prostu dodajesz pola lub zmieniasz część indeksu, która nie jest powiązana z polami, możesz po prostu zaktualizować definicję bez usuwania, ponownego tworzenia i pełnego ładowania.

  3. Pobierz definicję indeksu na wypadek, gdy będzie ona potrzebna do użycia w przyszłości.

  4. Usuń istniejący indeks, zakładając, że nie uruchamiasz nowych i starych indeksów obok siebie.

    Wszystkie zapytania przeznaczone dla tego indeksu są natychmiast porzucane. Pamiętaj, że usunięcie indeksu jest nieodwracalne, niszczenie magazynu fizycznego dla kolekcji pól i innych konstrukcji. Wstrzymaj się, aby pomyśleć o implikacjach, zanim ją upuszczą.

  5. Utwórz poprawiony indeks, w którym treść żądania zawiera zmienione lub zmodyfikowane definicje pól.

  6. Załaduj indeks z dokumentami ze źródła zewnętrznego.

Podczas tworzenia indeksu magazyn fizyczny jest przydzielany dla każdego pola w schemacie indeksu z odwróconym indeksem utworzonym dla każdego pola z możliwością wyszukiwania. Pola, które nie można przeszukiwać, mogą być używane w filtrach lub wyrażeniach, ale nie mają odwróconych indeksów i nie są przeszukiwane pełnotekstowo ani rozmyte. Podczas odbudowy indeksu te odwrócone indeksy są usuwane i tworzone ponownie na podstawie podanego schematu indeksu.

Podczas ładowania indeksu każdy odwrócony indeks każdego pola jest wypełniany wszystkimi unikatowymi, tokenizowanymi słowami z każdego dokumentu z mapą na odpowiednie identyfikatory dokumentów. Na przykład podczas indeksowania zestawu danych hoteli odwrócony indeks utworzony dla pola Miasto może zawierać terminy Seattle, Portland itd. Dokumenty, które obejmują Seattle lub Portland w polu City, będą miały identyfikator dokumentu wymieniony obok terminu. W dowolnej operacji Dodawania, aktualizowania lub usuwania terminy i lista identyfikatorów dokumentów są odpowiednio aktualizowane.

Równoważenie obciążeń

Indeksowanie nie działa w tle, ale usługa wyszukiwania równoważy wszystkie zadania indeksowania względem bieżących zapytań. Podczas indeksowania można monitorować żądania zapytań w portalu, aby upewnić się, że zapytania kończą się w odpowiednim czasie.

Jeśli obciążenia indeksowania wprowadzają niedopuszczalne poziomy opóźnienia zapytań, przeprowadź analizę wydajności i przejrzyj te porady dotyczące wydajności, aby uzyskać potencjalne środki zaradcze.

Sprawdź, czy są aktualizacje

Możesz rozpocząć wykonywanie zapytań dotyczących indeksu zaraz po załadowaniu pierwszego dokumentu. Jeśli znasz identyfikator dokumentu, interfejs API REST wyszukiwania dokumentów zwraca określony dokument. W przypadku szerszego testowania należy poczekać na pełne załadowanie indeksu, a następnie użyć zapytań, aby zweryfikować oczekiwany kontekst.

Aby sprawdzić zaktualizowaną zawartość, możesz użyć Eksploratora wyszukiwania lub klienta REST.

Jeśli dodano lub zmieniono nazwę pola, użyj $select , aby zwrócić to pole: search=*&$select=document-id,my-new-field,some-old-field&$count=true

Zobacz też