Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Azure KI-Suche ist über das Azure Portal, REST-APIs und Azure SDKs verfügbar. Es unterstützt auch Foundry IQ, die verwaltete Wissensschicht, die Unternehmensinhalte in wiederverwendbare, berechtigungsfähige Wissensbasen für Agenten im Microsoft Foundry-Portal transformiert.
Wenn Sie große oder komplexe Datasets in Ihrer Suchlösung indizieren müssen, behandelt dieser Artikel Strategien, um lang laufende Prozesse in Azure KI-Suche zu berücksichtigen.
Diese Strategien setzen voraus, dass sie mit den beiden grundlegenden Ansätzen zum Importieren von Daten vertraut sind: Pushen von Daten in einen Index oder Pullen von Daten aus einer unterstützten Datenquelle mithilfe eines Suchindexers. Wenn Ihr Szenario eine rechenintensive KI-Anreicherung beinhaltet, sind Indexer erforderlich, da Skillsets von Indexern abhängig sind.
Dieser Artikel ergänzt die Tipps für eine bessere Leistung, die bewährte Methoden für den Entwurf von Indizes und Abfragen bieten. Ein gut konzipierter Index, der nur die benötigten Felder und Attribute enthält, ist eine wichtige Voraussetzung für eine Indizierung im großen Stil.
Verwenden Sie einen nach dem 3. April 2024 erstellten Suchdienst für einen höheren Speicher pro Partition. Sie können auch ältere Dienste aktualisieren, um von höherem Partitionsspeicher zu profitieren.
Hinweis
Die in diesem Artikel beschriebenen Strategien gehen von einer einzelnen großen Datenquelle aus. Wenn Ihre Lösung die Indizierung aus mehreren Datenquellen erfordert, finden Sie einen empfohlenen Ansatz unter Indizieren mehrerer Datenquellen in Azure KI Search.
Daten mithilfe der Push-APIs indizieren
Push-APIs, z. B. die Index REST-API zum Hinzufügen von Dokumenten oder die IndexDocuments-Methode (Azure SDK für .NET), sind die häufigste Form der Indizierung in Azure KI-Suche. Für Lösungen, die eine Push-API verwenden, umfasst die Strategie für die zeitintensive Indizierung eine oder beide der folgenden Komponenten:
- Batchverarbeitung von Dokumenten
- Verwaltung von Threads
Batchverarbeitung mehrerer Dokumente pro Anforderung
Ein einfacher Mechanismus zum Indizieren einer großen Datenmenge besteht darin, mehrere Dokumente oder Datensätze in einer einzigen Anforderung zu übermitteln. Solange die gesamte Nutzlast kleiner als 16MB ist, kann eine Anforderung bis zu 1.000 Dokumente in einem Uploadmassenvorgang verarbeiten. Diese Grenzwerte gelten unabhängig davon, ob Sie den REST-API Dokument-Index hinzufügen oder die IndexDocuments-Methode im .NET SDK verwenden. Bei der Verwendung beider APIs können Sie 1.000 Dokumente im Text der einzelnen Anforderungen verpacken.
Durch die Batchverarbeitung von Dokumenten wird die Zeit, die zum Durchlaufen eines großen Datenvolumens benötigt wird, erheblich verkürzt. Die Bestimmung der optimalen Batchgröße für Ihre Daten ist ein wichtiger Faktor bei der Optimierung der Indizierungsgeschwindigkeit. Die optimale Batchgröße wird hauptsächlich durch die beiden folgenden Faktoren beeinflusst:
- Indexschema
- Datengröße
Da die optimale Batchgröße von Ihrem Index und von Ihren Daten abhängt, empfiehlt es sich, durch Testen verschiedener Batchgrößen zu ermitteln, bei welcher Größe die Indizierung für Ihr Szenario am schnellsten ist. Beispielcode zum Testen von Batchgrößen mithilfe des .NET SDK finden Sie unter Tutorial: Optimieren der Indizierung mit der Push-API.
Verwalten von Threads und einer Wiederholungsstrategie
Indexer verfügen über eine integrierte Threadverwaltung, aber wenn Sie die Push-APIs verwenden, muss Ihr Anwendungscode Threads verwalten. Stellen Sie sicher, dass genügend Threads vorhanden sind, um die verfügbare Kapazität vollständig nutzen zu können, insbesondere, wenn Sie ihren Dienst kürzlich aktualisiert, zu einer höheren Preisstufe gewechselt haben oder zu höheren Partitionen gewechselt sind.
Erhöhen Sie die Anzahl der gleichzeitigen Threads in Ihrem Clientcode.
Im Zuge der Erhöhung der Anforderungen für den Suchdienst werden möglicherweise HTTP-Statuscodes mit dem Hinweis zurückgegeben, dass die Anforderung nicht vollständig erfolgreich war. Zwei gängige HTTP-Statuscodes im Zusammenhang mit der Indizierung sind:
503 Dienst nicht verfügbar: Dieser Fehler bedeutet, dass die Auslastung des Systems sehr hoch ist und Ihre Anforderung aktuell nicht verarbeitet werden kann.
207 Multi-Status: Dieser Fehler bedeutet, dass der Vorgang für einige Dokumente erfolgreich war, bei mindestens einem Dokument aber ein Fehler aufgetreten ist.
Zum Behandeln von Fehlern sollten Anforderungen unter Verwendung einer Wiederholungsstrategie mit exponentiellem Backoff wiederholt werden.
Anforderungen mit 503-Fehlern und anderen Fehlern werden vom Azure .NET SDK automatisch wiederholt. Für die Wiederholung bei 207-Fehlern muss allerdings eine eigene Logik implementiert werden. Eine Wiederholungsstrategie kann auch mithilfe von Open-Source-Tools wie Polly implementiert werden.
Verwenden von Indexern und „Pull“-APIs
Indexer bieten mehrere Funktionen, die für lange laufende Prozesse nützlich sind:
- Batchverarbeitung von Dokumenten
- Parallele Indizierung über partitionierte Daten
- Planung und Änderungserkennung für die Indizierung nur neuer und geänderter Dokumente im Laufe der Zeit
Indexerzeitpläne können die Verarbeitung ab dem letzten bekannten Haltepunkt wieder aufnehmen. Wenn die Daten nicht innerhalb des Verarbeitungsfensters vollständig indiziert werden, setzt der Indexer beim nächsten Durchlauf dort fort, wo er aufgehört hat, vorausgesetzt, Sie verwenden eine Datenquelle, die eine Änderungserkennung unterstützt.
Partitionieren von Daten in kleinere einzelne Datenquellen ermöglicht die parallele Verarbeitung. Sie können Quelldaten z. B. in mehrere Container in Azure Blob Storage aufteilen, eine Datenquelle für jede Partition erstellen und dann die Indexer parallel ausführen, abhängig von der Anzahl der Sucheinheiten Ihres Suchdiensts.
Überprüfen der Batchgröße für einen Indexer
Wie die Push-API ermöglichen auch Indexer, die Anzahl von Elementen pro Batch zu konfigurieren. Legen Sie für Indexer basierend auf der Create Indexer REST-API das batchSize Argument fest, um diese Einstellung so anzupassen, dass sie den Merkmalen Ihrer Daten besser entspricht.
Die Standardbatchgrößen sind datenquellenspezifisch. Azure SQL-Datenbank und Azure Cosmos DB verfügen über eine Standardbatchgröße von 1.000. Im Gegensatz dazu wird bei der Azure Blob- und SharePoint-Indizierung (Vorschauversion) die Batchgröße auf 10 Dokumente festgelegt, um die größere durchschnittliche Dokumentgröße zu berücksichtigen.
Planen von Indexern für Prozesse mit langer Ausführung
Indexerzeitpläne sind ein wichtiger Mechanismus zum Verarbeiten von großen Datasets und für langsam ausgeführte Prozesse wie die Bildanalyse in einer Anreicherungspipeline.
Üblicherweise wird die Indexerverarbeitung innerhalb eines zweistündigen Zeitfensters ausgeführt. Wenn die vollständige Ausführung der Indizierungsworkload nicht nur Stunden, sondern Tage dauert, können Sie den Indexer mit einem wiederkehrenden Zeitplan konfigurieren, der alle zwei Stunden beginnt. Der Indexer setzt dann die Verarbeitung dort fort, wo er zuletzt aufgehört hat (vorausgesetzt, für die Datenquelle ist die Änderungsnachverfolgung aktiviert). So kann ein Indexer über mehrere Tage hinweg das Dokumentbacklog durchlaufen, bis alle nicht verarbeitete Dokumente verarbeitet wurden. Dieses Muster ist besonders wichtig während der ersten Ausführung oder beim Indizieren großer Blob-Container, wobei allein die Blob-Auflistungsphase mehrere Stunden oder Tage in Anspruch nehmen kann. Während dieser Zeit zeigt der Indexer keine verarbeiteten Blobs an, aber sofern kein Fehler gemeldet wird, geht er wahrscheinlich weiterhin die Blobliste durch. Die Dokumentverarbeitung und -anreicherung beginnt erst nach Abschluss dieser Phase, und dieses Verhalten wird erwartet.
{
"dataSourceName" : "hotels-ds",
"targetIndexName" : "hotels-idx",
"schedule" : { "interval" : "PT2H", "startTime" : "2024-01-01T00:00:00Z" }
}
Wenn keine neuen oder aktualisierten Dokumente mehr in der Datenquelle vorhanden sind, werden im Ausführungsverlauf des Indexers 0/0 verarbeitete Dokumente gemeldet, und es findet keine Verarbeitung statt.
Weitere Informationen zum Festlegen von Zeitplänen finden Sie unter REST-API zum Erstellen von Indexern oder Planen von Indexern in der Azure KI-Suche.
Hinweis
Das maximale Verarbeitungsfenster hängt davon ab, ob der Indexer über ein Skillset verfügt. Indizierer mit Skillsets werden in einer intern verwalteten Multimandantenumgebung mit einer Höchstdauer von 2 Stunden ausgeführt. Indexer, die für die Verwendung freigegebener privater Links konfiguriert sind, werden mit einem Maximalwert von 24 Stunden ausgeführt. Indizierer ohne Skillsets werden mit einem Maximalwert von 24 Stunden ausgeführt.
Wenn Ihr Indizier ein Skillset mit Anreicherungscache verwendet, lesen Sie die folgenden Informationen, bevor Sie den Cache für Workloads im großen Maßstab aktivieren.
Caution
Bei Workloads mit zeitintensiven Skills, wiederholten Unterbrechungen oder häufigen Fehlern kann ein Anreicherungscache die gesamte Neuverarbeitung während der anfänglichen Aufnahme oder Wiederherstellung erhöhen. Ein Anreicherungscache ist keine Sicherung und verfolgt nicht, welche Dokumente die Verarbeitung abgeschlossen haben.
Paralleles Ausführen von Indexern
Wenn Sie über partitionierte Daten verfügen, können Sie mehrere Indexer-Datenquellen-Kombinationen erstellen, die aus jeder Datenquelle pullen und in denselben Suchindex schreiben. Da jeder Indexer eindeutig ist, können Sie sie gleichzeitig ausführen, sodass Sie einen Suchindex schneller auffüllen, als wenn Sie sie sequenziell ausgeführt haben.
Stellen Sie sicher, dass Sie über genügend Kapazität verfügen. Eine Sucheinheit in Ihrem Dienst kann einen Indexer zu jeder angegebenen Uhrzeit ausführen. Das Erstellen mehrerer Indexer ist nur nützlich, wenn sie parallel ausgeführt werden können.
Die Anzahl von Indizierungsaufträgen, die gleichzeitig ausgeführt werden können, variiert bei der text- und skillsbasierten Indizierung. Weitere Informationen finden Sie unter Indexerausführung.
Wenn Ihre Datenquelle ein Azure Blob Storage-Container oder Azure Data Lake Storage Gen2 ist, kann die Aufzählung einer großen Anzahl von Blobs lange dauern (sogar Stunden). Daher scheint die Anzahl der erfolgreich verarbeiteten Dokumente Ihres Indexers während dieser Zeit nicht zu steigen, und es kann so wirken, als würde er keine Fortschritte machen, obwohl das tatsächlich der Fall ist. Wenn die Dokumentverarbeitung für eine große Anzahl von Blobs schneller erfolgen soll, sollten Sie die Partitionierung Ihrer Daten in mehrere Container erwägen und parallele Indexer erstellen, die auf einen einzelnen Index verweisen.
Wechseln Sie im Azure-Portal zu Ihrem Suchdienst.
Überprüfen Sie die Anzahl der sucheinheiten, die von Ihrem Suchdienst verwendet werden. Wählen Sie Einstellungen>Skalieren aus, um die Anzahl oben auf der Seite anzuzeigen. Die Anzahl der parallel ausgeführten Indexer entspricht ungefähr der Anzahl der Sucheinheiten.
Partitionieren Sie Ihre Quelldaten auf mehrere Container oder mehrere virtuelle Ordner innerhalb desselben Containers.
Erstellen Sie mehrere Datenquellen, eine für jede Partition, die jeweils mit ihrem eigenen Indexer gekoppelt sind.
Geben Sie in jedem Indexer den gleichen Zielsuchindex an.
Planen Sie die Indexer.
Überprüfen Sie den Indexerstatus und den Ausführungsverlauf zur Bestätigung.
Die parallele Indizierung birgt einige Risiken. Denken Sie zunächst daran, dass die Indizierung nicht im Hintergrund ausgeführt wird, was die Wahrscheinlichkeit erhöht, dass Abfragen gedrosselt oder gelöscht werden.
Zweitens sperrt Azure KI Search den Index nicht für Updates. Gleichzeitige Schreibvorgänge werden durch Aufrufen eines Wiederholungsversuchs verwaltet, wenn ein bestimmter Schreibvorgang beim ersten Versuch nicht erfolgreich ist, aber Sie bemerken möglicherweise eine Zunahme der Indizierungsfehler.
Mehrere Sätze aus Indexern und Datenquellen können zwar auf den gleichen Index ausgerichtet sein, dabei besteht jedoch die Gefahr, dass bereits vorhandene Werte im Index durch Indexerausführungen überschrieben werden. Wenn ein zweiter Satz aus Indexer und Datenquelle die gleichen Dokumente und Felder verwendet, werden sämtliche Werte der ersten Ausführung überschrieben. Feldwerte werden vollständig ersetzt. Ein Indexer kann keine Werte aus mehreren Ausführungen im gleichen Feld zusammenführen.
Indizieren von Big Data in Spark
Wenn Sie über eine Big Data-Architektur verfügen und sich Ihre Daten auf einem Spark-Cluster befinden, verwenden Sie SynapseML zum Laden und Indizieren von Daten. Das Lernprogramm enthält Schritte zum Aufrufen von Foundry Tools für die KI-Anreicherung, aber Sie können auch die AzureSearchWriter-API für die Textindizierung verwenden.
Verwandte Inhalte
- Lernprogramm: Optimieren der Indizierung mithilfe der Push-API
- Tutorial: Indizieren großer Datenmengen aus Apache Spark mithilfe von SynapseML und Azure KI Search
- Tipps für eine bessere Leistung in Azure KI-Suche
- Analysieren der Leistung in Azure KI-Suche
- Indexer in Azure KI-Suche
- Überwachen des Status und der Ergebnisse von Indexern in Azure KI-Suche