Neuerstellen eines Azure Search-IndexesHow to rebuild an Azure Search index

In diesem Artikel werden die Neuerstellung eines Azure Search-Indexes und die Umstände erläutert, unter denen eine Neuerstellung erforderlich ist. Außerdem werden Empfehlungen bereitgestellt, wie die Auswirkungen von Neuerstellungen auf laufende Abfrageanforderungen auf ein Mindestmaß reduziert werden können.This article explains how to rebuild an Azure Search index, the circumstances under which rebuilds are required, and recommendations for mitigating the impact of rebuilds on ongoing query requests.

Eine Neuerstellung bezieht sich auf Löschen und Neuerstellen der physischen Datenstrukturen, die einem Index zugeordnet sind, einschließlich aller auf Feldern basierenden invertierten Indizes.A rebuild refers to dropping and recreating the physical data structures associated with an index, including all field-based inverted indexes. In Azure Search können einzelne Felder nicht gelöscht und neu erstellt werden.In Azure Search, you cannot drop and recreate individual fields. Um einen Index neu zu erstellen, muss der gesamte Feldspeicher gelöscht, basierend auf einem vorhandenen oder überarbeiteten Indexschema neu erstellt und dann mit Daten neu aufgefüllt werden, die mithilfe von Push an den Index übertragen oder per Pull aus externen Quellen bezogen werden.To rebuild an index, all field storage must be deleted, recreated based on an existing or revised index schema, and then repopulated with data pushed to the index or pulled from external sources. Normalerweise werden Indizes während der Entwicklung neu erstellt. Es kann jedoch vorkommen, dass Sie einen Index auf Produktionsebene neu erstellen müssen, um Strukturänderungen zu berücksichtigen, wenn beispielsweise komplexe Typen oder Felder zu Vorschlagsfunktionen hinzugefügt werden.It's common to rebuild indexes during development, but you might also need to rebuild a production-level index to accommodate structural changes, such as adding complex types or adding fields to suggesters.

Im Gegensatz zu Neuerstellungen, bei denen ein Index offlinegeschaltet wird, wird die Datenaktualisierung als Hintergrundaufgabe ausgeführt.In contrast with rebuilds that take an index offline, data refresh runs as a background task. Sie können Dokumente mit minimalen Unterbrechungen für Abfrageworkloads hinzufügen, entfernen und ersetzen, auch wenn die Ausführung von Abfragen in der Regel längere Zeit in Anspruch nimmt.You can add, remove, and replace documents with minimal disruption to query workloads, although queries typically take longer to complete. Weitere Informationen zum Aktualisieren von Indexinhalten finden Sie unter Hinzufügen, Aktualisieren oder Löschen von Dokumenten.For more information on updating index content, see Add, Update or Delete Documents.

Bedingungen für die NeuerstellungRebuild conditions

BedingungCondition BESCHREIBUNGDescription
Ändern einer FelddefinitionChange a field definition Für die Überarbeitung eines Feldnamens, Datentyps oder spezifischer Indexattribute (durchsuchbar, filterbar, sortierbar, facettenreich) ist eine vollständige Neuerstellung erforderlich.Revising a field name, data type, or specific index attributes (searchable, filterable, sortable, facetable) requires a full rebuild.
Zuweisen eines Analysetools zu einem FeldAssign an analyzer to a field Analysetools werden in einem Index definiert und dann Feldern zugewiesen.Analyzers are defined in an index and then assigned to fields. Sie können einem Index jederzeit eine neue Analysetooldefinition hinzufügen, aber Sie können ein Analysetool nur zuweisen, wenn das Feld erstellt wird.You can add a new analyzer definition to an index at any time, but you can only assign an analyzer when the field is created. Dies gilt sowohl für das Analysetool als auch die indexAnalyzer-Eigenschaften.This is true for both the analyzer and indexAnalyzer properties. Die searchAnalyzer-Eigenschaft ist eine Ausnahme (Sie können diese Eigenschaft einem vorhandenen Feld zuweisen).The searchAnalyzer property is an exception (you can assign this property to an existing field).
Aktualisieren oder Löschen einer Analysetooldefinition in einem IndexUpdate or delete an analyzer definition in an index Sie können eine bestehende Analysetoolkonfiguration (Analysetool, Tokenizer, Tokenfilter oder Zeichenfilter) im Index nicht löschen oder ändern, es sei denn, Sie erstellen den gesamten Index neu.You cannot delete or change an existing analyzer configuration (analyzer, tokenizer, token filter, or char filter) in the index unless you rebuild the entire index.
Hinzufügen eines Felds zu einer VorschlagsfunktionAdd a field to a suggester Wenn ein Feld bereits vorhanden ist, und Sie es einer Vorschlagsfunktion hinzufügen möchten, müssen Sie den Index neu erstellen.If a field already exists and you want to add it to a Suggesters construct, you must rebuild the index.
Löschen eines FeldsDelete a field Um alle Spuren eines Felds physisch entfernen zu können, müssen Sie den Index neu erstellen.To physically remove all traces of a field, you have to rebuild the index. Wenn eine sofortige Wiederherstellung nicht sinnvoll ist, können Sie den Anwendungscode so ändern, dass der Zugriff auf das Feld „gelöscht“ deaktiviert wird.When an immediate rebuild is not practical, you can modify application code to disable access to the "deleted" field. Die Felddefinition und die Inhalte bleiben physisch bis zur nächsten Neuerstellung im Index, wenn Sie ein Schema verwenden, bei dem das betreffende Feld ausgelassen wird.Physically, the field definition and contents remain in the index until the next rebuild, when you apply a schema that omits the field in question.
Wechseln zwischen EbenenSwitch tiers Wenn Sie mehr Kapazität benötigen, gibt es kein direktes Upgrade.If you require more capacity, there is no in-place upgrade. Am neuen Kapazitätspunkt wird ein neuer Dienst erstellt, und Indizes müssen von Grund auf für den neuen Dienst erstellt werden.A new service is created at the new capacity point, and indexes must be built from scratch on the new service.

Alle übrigen Änderungen können ohne Auswirkungen auf die vorhandenen physischen Strukturen vorgenommen werden.Any other modification can be made without impacting existing physical structures. Insbesondere ist für die folgenden Änderungen keine Indexneuerstellung erforderlich:Specifically, the following changes do not require an index rebuild:

  • Hinzufügen eines neuen FeldsAdd a new field
  • Festlegen des Attribut Abrufbar für ein vorhandenes FeldSet the retrievable attribute on an existing field
  • Festlegen eines searchAnalyzer für ein vorhandenes FeldSet a searchAnalyzer on an existing field
  • Hinzufügen einer neuen Analysetooldefinition in einem IndexAdd a new analyzer definition in an index
  • Hinzufügen, Aktualisieren oder Löschen von BewertungsprofilenAdd, update, or delete scoring profiles
  • Hinzufügen, Aktualisieren oder Löschen von CORS-EinstellungenAdd, update, or delete CORS settings
  • Hinzufügen, Aktualisieren oder Löschen von synonymMapsAdd, update, or delete synonymMaps

Wenn Sie ein neues Feld hinzufügen, erhalten vorhandene indizierte Dokumente einen NULL-Wert für das neue Feld.When you add a new field, existing indexed documents are given a null value for the new field. Bei einer späteren Datenaktualisierung ersetzen Werte aus externen Quelldaten die von Azure Search hinzugefügten NULL-Werte.On a future data refresh, values from external source data replace the nulls added by Azure Search. Weitere Informationen zum Aktualisieren von Indexinhalten finden Sie unter Hinzufügen, Aktualisieren oder Löschen von Dokumenten.For more information on updating index content, see Add, Update or Delete Documents.

Teilindizierung oder inkrementelle IndizierungPartial or incremental indexing

In Azure Search können Sie die Indizierung nicht auf Feldbasis steuern und bestimmte Felder löschen oder neu erstellen.In Azure Search, you cannot control indexing on a per-field basis, choosing to delete or recreate specific fields. Ebenso gibt es keinen integrierten Mechanismus für das Indizieren von Dokumenten basierend auf Kriterien.Similarly, there is no built-in mechanism for indexing documents based on criteria. Alle Anforderungen im Hinblick auf die kriteriengesteuerte Indizierung müssen durch benutzerdefinierten Code abgedeckt werden.Any requirements you have for criteria-driven indexing have to be met through custom code.

Eine Möglichkeit, die jedoch einfach umzusetzen ist, ist die Aktualisierung von Dokumenten in einem Index.What you can do easily, however, is refresh documents in an index. Für viele Suchlösungen sind die externen Quelldaten nur temporär zugänglich, und die Synchronisierung zwischen Quelldaten und einem Suchindex ist gängige Praxis.For many search solutions, external source data is volatile, and synchronization between source data and a search index is a common practice. Rufen Sie im Code den Vorgang zum Hinzufügen, Aktualisieren oder Löschen von Dokumenten oder die .NET-Entsprechung auf, um den Indexinhalt zu aktualisieren oder um Werte für ein neues Feld hinzuzufügen.In code, call the Add, Update or Delete Documents operation or the .NET equivalent to update index content, or to add values for a new field.

Teilindizierung mit IndexernPartial indexing with indexers

Indexer vereinfachen die Aufgabe der Datenaktualisierung.Indexers simplify the data refresh task. Ein Indexer kann nur eine einzige Tabelle oder Sicht in der externen Datenquelle indizieren.An indexer can only index one table or view in the external data source. Zum Indizieren mehrerer Tabellen besteht der einfachste Ansatz darin, eine Sicht zu erstellen, die Tabellen verknüpft und die Spalten projiziert, die Sie indizieren möchten.To index multiple tables, the simplest approach is to create a view that joins tables and projects the columns you want to index.

Wenn Sie Indexer verwenden, die Daten aus externen Quellen durchforsten, überprüfen Sie die Quelldaten auf eine Spalte „High Water Mark“ (Obergrenzenmarkierung).When using indexers that crawl external data sources, check for a "high water mark" column in the source data. Falls vorhanden, können Sie diese zur Erkennung inkrementeller Änderungen verwenden, indem Sie nur die Zeilen mit neuen oder überarbeiteten Inhalten auswählen.If one exists, you can use it for incremental change detection by picking up just those rows containing new or revised content. Für den Azure Blob-Speicher wird ein lastModified-Feld verwendet.For Azure Blob storage, a lastModified field is used. Im Azure-Tabellenspeicher dient timestamp demselben Zweck.On Azure Table storage, timestamp serves the same purpose. Genauso weisen sowohl der Azure SQL-Datenbank-Indexer als auch der Azure Cosmos DB-Indexer Felder zum Kennzeichnen von Zeilenupdates auf.Similarly, both Azure SQL Database indexer and Azure Cosmos DB indexer have fields for flagging row updates.

Weitere Informationen zu Indexern finden Sie in der Übersicht über Indexer und im Artikel zur REST-API zum Zurücksetzen von Indexern.For more information about indexers, see Indexer overview and Reset Indexer REST API.

Neuerstellen eines IndexesHow to rebuild an index

Planen Sie häufige, vollständige Neuerstellungen für die aktive Entwicklung ein, wenn sich Indexschemas im Flux-Zustand befinden.Plan on frequent, full rebuilds during active development, when index schemas are in a state of flux. Für Anwendungen, die bereits in der Produktion eingesetzt werden, empfiehlt sich die Erstellung eines neuen Indexes, der parallel zu einem vorhandenen Index ausgeführt wird, um eine Downtime von Abfragen zu vermeiden.For applications already in production, we recommend creating a new index that runs side by side an existing index to avoid query downtime.

Für Indexupdates sind Lese-/Schreibberechtigungen auf Dienstebene erforderlich.Read-write permissions at the service-level are required for index updates.

Sie können einen Index nicht im Portal neu erstellen.You cannot rebuild an index in the portal. Sie können programmgesteuert die REST-API zur Indexaktualisierung oder äquivalente .NET-APIs für eine vollständige Neuerstellung aufrufen.Programmatically, you can call Update Index REST API or equivalent .NET APIs for a full rebuild. Die Anforderung einer Indexaktualisierung ist identisch mit der REST-API zur Indexerstellung, hat aber einen anderen Kontext.An update index request is identical to Create Index REST API, but has a different context.

Der folgende Workflow ist eigentlich für die REST-API bestimmt, gilt aber gleichermaßen für das .NET SDK.The following workflow is biased towards the REST API, but applies equally to the .NET SDK.

  1. Wenn Sie den Indexnamen wiederverwenden, löschen Sie den vorhandenen Index.When reusing an index name, drop the existing index.

    Alle Abfragen, die sich an diesen Index richten, werden sofort gelöscht.Any queries targeting that index are immediately dropped. Das Löschen eines Indexes kann nicht rückgängig gemacht werden. Der physische Speicher für die Feldsammlung und andere Konstrukte wird zerstört.Deleting an index is irreversible, destroying physical storage for the fields collection and other constructs. Die Auswirkungen des Löschvorgangs für einen Index müssen Ihnen unbedingt klar sein, bevor Sie den Index löschen.Make sure you are clear on the implications of deleting an index before you drop it.

  2. Formulieren Sie eine Anforderung zur Indexaktualisierung mit Ihrem Dienstendpunkt, API-Schlüssel und einem Administratorschlüssel.Formulate an Update Index request with your service endpoint, API-key, and an admin key. Ein Administratorschlüssel ist für Schreibvorgänge erforderlich.An admin key is required for write operations.

  3. Geben Sie im Anforderungstext ein Indexschema mit den geänderten oder modifizierten Felddefinitionen an.In the body of the request, provide an index schema with the changed or modified field definitions. Der Anforderungstext enthält das Indexschema sowie Konstrukte für Bewertungsprofile, Analysetools, Vorschlagsfunktionen und CORS-Optionen.The request body contains the index schema, as well as constructs for scoring profiles, analyzers, suggesters, and CORS options. Schemaanforderungen werden unter Erstellen eines Indexes dokumentiert.Schema requirements are documented in Create Index.

  4. Senden Sie eine Anforderung zur Indexaktualisierung, um den physischen Ausdruck des Indexes in Azure Search neu zu erstellen.Send an Update Index request to rebuild the physical expression of the index on Azure Search.

  5. Laden Sie den Index mit Dokumenten aus einer externen Quelle.Load the index with documents from an external source.

Bei der Indexerstellung wird für jedes Feld im Indexschema physischer Speicher zugewiesen, und für jedes durchsuchbare Feld wird ein invertierter Index erstellt.When you create the index, physical storage is allocated for each field in the index schema, with an inverted index created for each searchable field. Nicht durchsuchbare Felder können in Filtern oder Ausdrücken verwendet werden, besitzen aber keine invertierten Indizes und können nicht mit der Volltext- oder Fuzzysuche durchsucht werden.Fields that are not searchable can be used in filters or expressions, but do not have inverted indexes and are not full-text or fuzzy searchable. Bei einer Indexneuerstellung werden diese invertierten Indizes gelöscht und basierend auf dem von Ihnen angegebenen Indexschema neu erstellt.On an index rebuild, these inverted indexes are deleted and recreated based on the index schema you provide.

Wenn Sie den Index laden, wird der invertierte Index der einzelnen Felder mit allen eindeutigen, mit Token versehenen Wörtern aus den einzelnen Dokumenten aufgefüllt, zusammen mit einer Zuordnung zu entsprechenden Dokument-IDs.When you load the index, each field's inverted index is populated with all of the unique, tokenized words from each document, with a map to corresponding document IDs. Beim Indizieren eines Datasets mit Hotels enthält ein invertierter Index, der für ein Feld „Stadt“ erstellt wurde, beispielsweise Begriffe für Seattle, Portland usw.For example, when indexing a hotels data set, an inverted index created for a City field might contain terms for Seattle, Portland, and so forth. Bei Dokumenten, die Seattle oder Portland im Feld „Stadt“ enthalten, wird die Dokument-ID neben dem Begriff aufgeführt.Documents that include Seattle or Portland in the City field would have their document ID listed alongside the term. Bei jedem Vorgang zum Hinzufügen, Aktualisieren oder Löschen wird die Liste aus Begriffen und Dokument-IDs entsprechend aktualisiert.On any Add, Update or Delete operation, the terms and document ID list are updated accordingly.

Hinweis

Wenn Sie strikte SLA-Anforderungen einhalten müssen, sollten Sie speziell für diese Aufgabe einen neuen Dienst bereitstellen, bei dem Entwicklung und Indizierung vollständig isoliert von einem Produktionsindex stattfinden.If you have stringent SLA requirements, you might consider provisioning a new service specifically for this work, with development and indexing occurring in full isolation from a production index. Ein separater Dienst wird auf eigener Hardware ausgeführt, sodass keine Ressourcenkonflikte entstehen können.A separate service runs on its own hardware, eliminating any possibility of resource contention. Nach Abschluss der Entwicklung behalten Sie den neuen Index bei und leiten Abfragen an den neuen Endpunkt und Index um, oder Sie führen fertiggestellten Code aus, um einen überarbeiteten Index für Ihren ursprünglichen Azure Search-Dienst zu veröffentlichen.When development is complete, you would either leave the new index in place, redirecting queries to the new endpoint and index, or you would run finished code to publish a revised index on your original Azure Search service. Zurzeit gibt es keinen Mechanismus zum Verschieben eines sofort einsatzbereiten Indexes zu einem anderen Dienst.There is currently no mechanism for moving a ready-to-use index to another service.

Anzeigen von UpdatesView updates

Sie können mit der Abfrage eines Indexes beginnen, sobald das erste Dokument geladen wurde.You can begin querying an index as soon as the first document is loaded. Wenn Sie die ID eines Dokuments kennen, gibt die REST-API zur Dokumentsuche das jeweilige Dokument zurück.If you know a document's ID, the Lookup Document REST API returns the specific document. Für umfangreichere Testvorgänge sollten Sie warten, bis der Index vollständig geladen wurde, und anschließend den erwarteten Kontext anhand von Abfragen überprüfen.For broader testing, you should wait until the index is fully loaded, and then use queries to verify the context you expect to see.

Weitere InformationenSee also