Aktualizowanie lub ponowne kompilowanie indeksu w usłudze Azure AI Search
W tym artykule wyjaśniono, jak zaktualizować istniejący indeks w usłudze Azure AI Search przy użyciu zmian schematu lub zmian zawartości za pomocą indeksowania przyrostowego. 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ń.
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.
W przypadku zmian schematu w aplikacjach już w środowisku produkcyjnym zalecamy utworzenie i przetestowanie nowego indeksu uruchamianego obok istniejącego indeksu. Użyj aliasu indeksu, aby zamienić się w nowym indeksie, unikając zmian w kodzie aplikacji.
Aktualizowanie zawartości
Indeksowanie przyrostowe i synchronizowanie indeksu ze zmianami w danych źródłowych ma podstawowe znaczenie dla większości aplikacji wyszukiwania. W tej sekcji opisano przepływ pracy aktualizowania zawartości pola w indeksie wyszukiwania.
Użyj tych samych technik ładowania dokumentów: Dokumenty — indeks (REST) lub równoważny interfejs API w zestawach SDK platformy Azure. Aby uzyskać więcej informacji na temat technik indeksowania, zobacz Ładowanie dokumentów.
Ustaw parametr ,
@search.action
aby określić wpływ na istniejące dokumenty:Akcja Efekt delete Usuwa cały dokument z indeksu. Jeśli chcesz usunąć pojedyncze pole, użyj scalania, ustawiając pole, którego dotyczy wartość null. Usunięte dokumenty i pola nie zwalniają natychmiast miejsca w indeksie. Co kilka minut proces w tle wykonuje fizyczne usunięcie. Niezależnie od tego, czy używasz portalu, czy interfejsu API do zwracania statystyk indeksu, możesz oczekiwać małego opóźnienia, zanim usunięcie zostanie odzwierciedlone w portalu i za pośrednictwem interfejsów API. Scalanie Aktualizuje dokument, który już istnieje, i kończy się niepowodzeniem dokumentu, którego nie można odnaleźć. Scalanie zastępuje istniejące wartości. Z tego powodu należy sprawdzić pola kolekcji zawierające wiele wartości, takie jak pola typu Collection(Edm.String)
. Jeśli na przykładtags
pole rozpoczyna się od wartości["budget"]
i wykonujesz scalanie z wartością["economy", "pool"]
, końcową wartościątags
pola jest["economy", "pool"]
. Nie będzie["budget", "economy", "pool"]
to .mergeOrUpload Zachowuje się jak scalanie, jeśli dokument istnieje, i przekazuje, czy dokument jest nowy. Jest to najbardziej typowa akcja aktualizacji przyrostowych. przekaż Podobnie jak "upsert", w którym dokument jest wstawiany, jeśli jest on nowy, i aktualizowany lub zastępowany, jeśli istnieje. Jeśli w dokumencie brakuje wartości, których indeks wymaga, wartość pola dokumentu jest ustawiona na wartość null. Opublikuj aktualizację.
Zapytania będą nadal uruchamiane, ale jeśli aktualizujesz lub usuwasz istniejące pola, możesz oczekiwać mieszanych wyników i większej częstości ograniczania przepustowości.
Porady dotyczące indeksowania przyrostowego
Indeksatory automatyzują indeksowanie przyrostowe. Jeśli możesz użyć indeksatora, a źródło danych obsługuje śledzenie zmian, możesz uruchomić indeksator w harmonogramie cyklicznym, aby dodać, zaktualizować lub zastąpić zawartość z możliwością wyszukiwania, aby była synchronizowana z danymi zewnętrznymi.
Jeśli tworzysz wywołania indeksu bezpośrednio za pośrednictwem interfejsu API wypychania, użyj
mergeOrUpload
jako akcji wyszukiwania.Ładunek musi zawierać klucze lub identyfikatory każdego dokumentu, który chcesz dodać, zaktualizować lub usunąć.
Jeśli indeks zawiera pola wektorowe, a właściwość ma
stored
wartość false, upewnij się, że wektor został określony w częściowej aktualizacji dokumentu, nawet jeśli wartość jest niezmieniona. Efektem ubocznym ustawieniastored
false jest to, że wektory są porzucane na operację ponownego indeksowania. Podanie wektora w ładunku dokumentów uniemożliwia takie zdarzenie.Aby zaktualizować zawartość prostych pól i pól podrzędnych w typach złożonych, wyświetl listę tylko pól, które chcesz zmienić. Jeśli na przykład musisz zaktualizować tylko pole opisu, ładunek powinien składać się z klucza dokumentu i zmodyfikowanego opisu. Pominięcie innych pól zachowuje istniejące wartości.
Aby scalić zmiany wbudowane w kolekcję ciągów, podaj całą wartość.
tags
Przypomnij sobie przykład pola z poprzedniej sekcji. Nowe wartości zastępują stare wartości dla całego pola i nie ma scalania w zawartości pola.
Oto przykład interfejsu API REST pokazujący następujące porady:
### Get Stay-Kay City Hotel by ID
GET {{baseUrl}}/indexes/hotels-vector-quickstart/docs('1')?api-version=2024-07-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
### Change the description, city, and tags for Stay-Kay City Hotel
POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search.index?api-version=2024-07-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"value": [
{
"@search.action": "mergeOrUpload",
"HotelId": "1",
"Description": "I'm overwriting the description for Stay-Kay City Hotel.",
"Tags": ["my old item", "my new item"],
"Address": {
"City": "Gotham City"
}
}
]
}
### Retrieve the same document, confirm the overwrites and retention of all other values
GET {{baseUrl}}/indexes/hotels-vector-quickstart/docs('1')?api-version=2024-07-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
Zmienianie schematu indeksu
Schemat indeksu definiuje fizyczne struktury danych utworzone w usłudze wyszukiwania, więc nie ma wielu zmian schematu, które można wprowadzić bez ponoszenia pełnej kompilacji. Poniższa lista wylicza zmiany schematu, które można bezproblemowo wprowadzić do istniejącego indeksu. Ogólnie rzecz biorąc, lista zawiera nowe pola i funkcje używane podczas wykonywania zapytania.
- Dodaj nowe pole
- Ustawianie atrybutu
retrievable
w istniejącym polu - Aktualizowanie
searchAnalyzer
pola o istniejącejindexAnalyzer
- 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ówMapy
- Dodawanie, aktualizowanie lub usuwanie konfiguracji semantycznych
Kolejność operacji to:
Pobierz definicję indeksu.
Popraw schemat za pomocą aktualizacji z poprzedniej listy.
Zaktualizuj schemat indeksu w usłudze wyszukiwania.
Zaktualizuj zawartość indeksu, aby pasowała do zmienionego schematu, jeśli dodano nowe pole. W przypadku wszystkich pozostałych zmian istniejąca indeksowana zawartość jest używana jako.
Po zaktualizowaniu schematu indeksu w celu uwzględnienia nowego pola istniejące dokumenty w indeksie otrzymują wartość null dla tego pola. W następnym zadaniu indeksowania wartości z danych zewnętrznych źródeł zastępują wartości null dodane przez usługę Azure AI Search.
Podczas aktualizacji nie powinny występować żadne zakłócenia zapytań, ale wyniki zapytania będą się różnić w miarę wprowadzania aktualizacji.
Usuwanie i ponowne kompilowanie indeksu
Niektóre modyfikacje wymagają upuszczania i ponownego kompilowania indeksu, zastępując bieżący indeks nowym.
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 wykonuje kopię zapasową indeksu w serii plików JSON, a następnie ponownie utworzy indeks w określonej usłudze wyszukiwania. |
Kolejność operacji to:
Pobierz definicję indeksu, jeśli potrzebujesz jej do użycia w przyszłości lub jako podstawy dla nowej wersji.
Rozważ użycie rozwiązania do tworzenia kopii zapasowej i przywracania w celu zachowania kopii zawartości indeksu. Istnieją rozwiązania w języku C# i w języku Python. Zalecamy wersję języka Python, ponieważ jest ona bardziej aktualna.
Jeśli masz pojemność w usłudze wyszukiwania, zachowaj istniejący indeks podczas tworzenia i testowania nowego.
Usuń istniejący indeks. Zapytania skierowane do indeksu są natychmiast porzucane. Pamiętaj, że usunięcie indeksu jest nieodwracalne, niszczenie magazynu fizycznego dla kolekcji pól i innych konstrukcji.
Opublikuj poprawiony indeks, w którym treść żądania zawiera zmienione lub zmodyfikowane definicje pól i konfiguracje.
Załaduj indeks z dokumentami ze źródła zewnętrznego. Dokumenty są indeksowane przy użyciu definicji pól i konfiguracji nowego schematu.
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 i indeksem wektorowym utworzonym dla każdego pola wektora. 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 i indeksy wektorowe są usuwane i tworzone ponownie na podstawie podanego schematu indeksu.
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
.
Witryna Azure Portal udostępnia rozmiar indeksu i rozmiar indeksu wektora. Te wartości można sprawdzić po zaktualizowaniu indeksu, ale pamiętaj, aby spodziewać się małego opóźnienia, ponieważ usługa przetwarza zmianę i uwzględnia częstotliwość odświeżania portalu, co może potrwać kilka minut.
Usuwanie oddzielonych dokumentów
Usługa Azure AI Search obsługuje operacje na poziomie dokumentu, dzięki czemu można wyszukiwać, aktualizować i usuwać określony dokument w izolacji. W poniższym przykładzie pokazano, jak usunąć dokument.
Usunięcie dokumentu nie powoduje natychmiastowego zwolnienia miejsca w indeksie. Co kilka minut proces w tle wykonuje fizyczne usunięcie. Niezależnie od tego, czy używasz portalu, czy interfejsu API do zwracania statystyk indeksu, możesz oczekiwać małego opóźnienia, zanim usunięcie zostanie odzwierciedlone w portalu i metrykach interfejsu API.
Zidentyfikuj, które pole jest kluczem dokumentu. W portalu można wyświetlić pola poszczególnych indeksów. Klucze dokumentów są polami ciągów i są oznaczone ikoną klucza, aby ułatwić ich odnajdowanie.
Sprawdź wartości pola klucza dokumentu:
search=*&$select=HotelId
. Prosty ciąg jest prosty, ale jeśli indeks używa pola zakodowanego w formacie base-64 lub jeśli dokumenty wyszukiwania zostały wygenerowane na podstawieparsingMode
ustawienia, możesz pracować z wartościami, których nie znasz.Wyszukaj dokument , aby sprawdzić wartość identyfikatora dokumentu i przejrzeć jego zawartość przed jego usunięciem. Określ klucz lub identyfikator dokumentu w żądaniu. W poniższych przykładach przedstawiono prosty ciąg dla przykładowego indeksu Hotels i zakodowany ciąg base-64 dla klucza metadata_storage_path indeksu cog-search-demo.
GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/1111?api-version=2024-07-01
GET https://[service name].search.windows.net/indexes/cog-search-demo/docs/aHR0cHM6Ly9oZWlkaWJsb2JzdG9yYWdlMi5ibG9iLmNvcmUud2luZG93cy5uZXQvY29nLXNlYXJjaC1kZW1vL2d1dGhyaWUuanBn0?api-version=2024-07-01
Usuń dokument przy użyciu usuwania
@search.action
, aby usunąć go z indeksu wyszukiwania.POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/index?api-version=2024-07-01 Content-Type: application/json api-key: [admin key] { "value": [ { "@search.action": "delete", "id": "1111" } ] }