Löschen und Neuerstellen eines Indexes in Azure Cognitive Search.

In diesem Artikel werden die Löschung und Neuerstellung eines Azure Cognitive Search-Indexes und die Umstände erläutert, unter denen eine Neuerstellung erforderlich ist. Außerdem werden Empfehlungen gegeben, wie die Auswirkungen von Neuerstellungen auf laufende Abfrageanforderungen auf ein Mindestmaß reduziert werden können. Wenn Sie den Suchindex häufig neu erstellen müssen, wird empfohlen, Indexaliase zu verwenden, um den Austausch des Indexes zu vereinfachen, auf den Ihre Anwendung verweist.

Ein Suchindex ist eine Sammlung physischer Ordner und feldbasierter invertierter Indizes Ihrer Inhalte, die in Shards über die Anzahl der Partitionen verteilt sind, die Ihrem Suchindex zugeordnet sind. In der kognitiven Azure-Suche können einzelne Felder nicht gelöscht und neu erstellt werden. Wenn Sie ein Feld komplett neu erstellen möchten, 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.

Es ist üblich, Indizes während der Entwicklung zu löschen und neu zu erstellen, wenn Sie den Indexentwurf durchlaufen. Die meisten Entwickler arbeiten mit einem kleinen repräsentativen Beispiel ihrer Daten, um diesen Prozess zu vereinfachen.

Bedingungen für die Neuerstellung

In der folgenden Tabelle sind die Bedingungen aufgeführt, unter denen eine Neuerstellung erforderlich ist.

Bedingung BESCHREIBUNG
Ändern einer Felddefinition Für die Überarbeitung eines Feldnamens, Datentyps oder spezifischer Indexattribute (durchsuchbar, filterbar, sortierbar, facettenreich) ist eine vollständige Neuerstellung erforderlich.
Zuweisen eines Analysetools zu einem Feld Analysetools werden in einem Index definiert und dann Feldern zugewiesen. Sie können einem Index jederzeit eine neue Analysetooldefinition hinzufügen, aber Sie können ein Analysetool nur zuweisen, wenn das Feld erstellt wird. Dies gilt sowohl für das Analysetool als auch die indexAnalyzer-Eigenschaften. Die searchAnalyzer-Eigenschaft ist eine Ausnahme (Sie können diese Eigenschaft einem vorhandenen Feld zuweisen).
Aktualisieren oder Löschen einer Analysetooldefinition in einem 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.
Hinzufügen eines Felds zu einer Vorschlagsfunktion Wenn ein Feld bereits vorhanden ist, und Sie es einer Vorschlagsfunktion hinzufügen möchten, müssen Sie den Index neu erstellen.
Löschen eines Felds Um alle Spuren eines Felds physisch entfernen zu können, müssen Sie den Index neu erstellen. Wenn eine sofortige Neuerstellung nicht praktikabel ist, können Sie den Anwendungscode so ändern, dass der Zugriff auf das "gelöschte" Feld deaktiviert wird, oder den $select-Abfrageparameter verwenden, um auszuwählen, welche Felder im Resultset angezeigt werden. 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.
Wechseln zwischen Ebenen Wenn Sie mehr Kapazität benötigen, gibt es kein direktes Upgrade im Azure-Portal. Es muss ein neuer Dienst erstellt werden, und Indizes müssen von Grund auf für den neuen Dienst erstellt werden. Um diesen Prozess zu automatisieren, können Sie den index-backup-restore-Beispielcode in diesem .NET-Beispielrepository für die kognitive Azure-Suche verwenden. Diese App sichert Ihren Index in einer Reihe von JSON-Dateien und erstellt ihn dann in einem Suchdienst, den Sie angeben, neu.

Aktualisieren von Bedingungen

Viele weitere Änderungen können ohne Auswirkungen auf die vorhandenen physischen Strukturen vorgenommen werden. Insbesondere ist für die folgenden Änderungen keine Indexneuerstellung erforderlich. Für diese Änderungen können Sie eine Indexdefinition entsprechend aktualisieren.

  • Hinzufügen eines neuen Felds
  • Festlegen des Attribut Abrufbar für ein vorhandenes Feld
  • Aktualisieren von searchAnalyzer für ein Feld mit einem vorhandenen indexAnalyzer-Element
  • Hinzufügen einer neuen Analysedefinition in einem Index (die auf neue Felder angewendet werden kann)
  • Hinzufügen, Aktualisieren oder Löschen von Bewertungsprofilen
  • Hinzufügen, Aktualisieren oder Löschen von CORS-Einstellungen
  • Hinzufügen, Aktualisieren oder Löschen von synonymMaps
  • Hinzufügen, Aktualisieren oder Löschen von semantischen Konfigurationen

Wenn Sie ein neues Feld hinzufügen, erhalten vorhandene indizierte Dokumente einen NULL-Wert für das neue Feld. Bei einer späteren Datenaktualisierung werden die mit der kognitiven Azure-Suche hinzugefügten NULL-Werte durch Werte aus externen Quelldaten ersetzt. Weitere Informationen zum Aktualisieren von Indexinhalten finden Sie unter Hinzufügen, Aktualisieren oder Löschen von Dokumenten.

Neuerstellen eines Indexes

Während der Entwicklung ändert sich das Indexschema häufig. Sie können dies einplanen, indem Sie Indizes mit einem kleinen repräsentativen Datensatz erstellen, die schnell gelöscht, neu erstellt und wieder geladen werden können.

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. Ihr Anwendungscode ermöglicht die Umleitung auf den neuen Index.

  1. Bestimmen Sie, ob eine Neuerstellung erforderlich ist. Wenn Sie nur Felder hinzufügen oder einen Teil des Indexes ändern, der nicht mit Feldern zusammenhängt, können Sie die Definition möglicherweise einfach aktualisieren, ohne sie zu löschen, neu zu erstellen und vollständig neu zu laden.

  2. Rufen Sie eine Indexdefinition ab, falls Sie zukünftig darauf verweisen müssen.

  3. Löschen Sie den vorhandenen Index, vorausgesetzt, dass Sie nicht parallel neue und alte Indizes ausführen.

    Alle Abfragen, die sich an diesen Index richten, werden sofort gelöscht. Denken Sie daran, dass das Löschen eines Indexes nicht rückgängig gemacht werden kann. Der physische Speicher für die Feldsammlung und andere Konstrukte wird zerstört. Bedenken Sie vor dem Löschen in Ruhe die Auswirkungen.

  4. Erstellen Sie einen überarbeiteten Index, wobei der Text der Anforderung geänderte oder modifizierte Felddefinitionen enthält.

  5. Laden Sie den Index mit Dokumenten aus einer externen Quelle.

Bei der Indexerstellung wird für jedes Feld im Indexschema physischer Speicher zugewiesen, und für jedes durchsuchbare Feld wird ein invertierter Index erstellt. 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. Bei einer Indexneuerstellung werden diese invertierten Indizes gelöscht und basierend auf dem von Ihnen angegebenen Indexschema neu erstellt.

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. 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. Bei Dokumenten, die Seattle oder Portland im Feld „Stadt“ enthalten, wird die Dokument-ID neben dem Begriff aufgeführt. Bei jedem Vorgang zum Hinzufügen, Aktualisieren oder Löschen wird die Liste aus Begriffen und Dokument-IDs entsprechend aktualisiert.

Ausgleichen von Workloads

Die Indizierung erfolgt nicht im Hintergrund, aber der Suchdienst gleicht alle Indizierungsaufträge mit laufenden Abfragen aus. Während der Indizierung können Sie Abfrageanforderungen im Portal überwachen, um sicherzustellen, dass die Abfragen innerhalb eines angemessenen Zeitraums abgeschlossen werden.

Wenn die Indizierung von Workloads zu nicht akzeptablen Abfragewartezeiten führt, führen Sie eine Leistungsanalyse durch, und überprüfen Sie diese Leistungstipps auf mögliche Entschärfungen.

Suchen nach Updates

Sie können mit der Abfrage eines Indexes beginnen, sobald das erste Dokument geladen wurde. Wenn Sie die ID eines Dokuments kennen, gibt die REST-API zur Dokumentsuche das jeweilige Dokument zurück. 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.

Sie können den Suchexplorer oder ein Webtesttool wie Postman verwenden, um nach aktualisierten Inhalten zu suchen.

Wenn Sie ein Feld hinzugefügt oder umbenannt haben, verwenden Sie $select, um dieses Feld zurückzugeben: search=*&$select=document-id,my-new-field,some-old-field&$count=true

Weitere Informationen