Indizieren großer Datasets in Azure SearchHow to index large data sets in Azure Search

Wenn das Datenvolumen zunimmt oder die Verarbeitung geändert werden muss, stellen Sie möglicherweise fest, dass standardmäßige Indizierungsstrategien nicht ausreichend sind.As data volumes grow or processing needs change, you might find that default indexing strategies are no longer practical. Für Azure Search gibt es verschiedene Ansätze für die Aufnahme von größeren Datasets, angefangen bei der Art, wie Sie eine Uploadanforderung strukturieren, bis zur Verwendung eines quellenspezifischen Indexers für geplante und verteilte Workloads.For Azure Search, there are several approaches for accommodating larger data sets, ranging from how you structure a data upload request, to using a source-specific indexer for scheduled and distributed workloads.

Die Techniken für große Datenmengen gelten auch für lang andauernde Prozesse.The same techniques for large data also apply to long-running processes. Insbesondere die unter Parallelindizierung beschriebenen Schritte sind hilfreich für die Ausführung rechenintensiver Indizierung, z.B. Bildanalyse oder Verarbeitung natürlicher Sprache in kognitiven Suchpipelines.In particular, the steps outlined in parallel indexing are helpful for computationally intensive indexing, such as image analysis or natural language processing in cognitive search pipelines.

BatchindizierungBatch indexing

Eines der einfachsten Verfahren für die Indizierung eines größeren Datasets ist das Senden mehrerer Dokumente oder Datensätze in einer einzelnen Anforderung.One of the simplest mechanisms for indexing a larger data set is to submit multiple documents or records in a single request. Solange die gesamte Nutzlast kleiner als 16MB ist, kann eine Anforderung bis zu 1.000 Dokumente in einem Uploadmassenvorgang verarbeiten.As long as the entire payload is under 16 MB, a request can handle up to 1000 documents in a bulk upload operation. Das Add or Update Documents-REST-API vorausgesetzt, würden Sie 1.000 Dokumente in den Hauptteil der Anforderung packen.Assuming the Add or Update Documents REST API, you would package 1000 documents in the body of the request.

Die Batchindizierung wird für einzelne Anforderungen mit REST oder .NET oder über Indexer implementiert.Batch indexing is implemented for individual requests using REST or .NET, or through indexers. Ein paar Indexer werden unter verschiedenen Einschränkungen eingesetzt.A few indexers operate under different limits. Insbesondere wird bei der Azure-Blobindizierung eine Batchgröße von 10 Dokumenten hinsichtlich der größeren durchschnittlichen Dokumentgröße festgelegt.Specifically, Azure Blob indexing sets batch size at 10 documents in recognition of the larger average document size. Für Indexer basierend auf der Create Indexer-REST-API können Sie das BatchSize-Argument zum Anpassen dieser Einstellung festlegen, damit die Eigenschaften besser Ihren Daten entsprechen.For indexers based on the Create Indexer REST API, you can set the BatchSize argument to customize this setting to better match the characteristics of your data.

Hinweis

Um die Dokumentgröße niedrig zu halten, achten Sie darauf, nicht abfragbare Daten von der Anforderung auszuschließen.To keep document size down, remember to exclude non-queryable data from the request. Bilder und andere binäre Daten können nicht direkt durchsucht werden und sollten nicht im Index gespeichert werden.Images and other binary data are not directly searchable and shouldn't be stored in the index. Um nicht abfragbare Daten in Suchergebnisse zu integrieren, sollten Sie ein nicht durchsuchbares Feld definieren, in dem ein URL-Verweis auf die Ressource gespeichert wird.To integrate non-queryable data into search results, you should define a non-searchable field that stores a URL reference to the resource.

Hinzufügen von RessourcenAdd resources

Bei Diensten, die zu einem der Standardtarife bereitgestellt werden, ist die Kapazität für Speicherung und Workloads (Abfragen oder Indizierung) oft nicht ausgelastet, sodass die Erhöhung der Partitions- und Replikateanzahl eine nahe liegende Lösung für die Unterbringung größerer Datasets ist.Services that are provisioned at one of the Standard pricing tiers often have underutilized capacity for both storage and workloads (queries or indexing), which makes increasing the partition and replica counts an obvious solution for accommodating larger data sets. Für optimale Ergebnisse benötigen Sie beide Ressourcen: Partitionen zur Speicherung und Replikate für die Datenerfassung.For best results, you need both resources: partitions for storage, and replicas for the data ingestion work.

Replikate und Partitionen sind zunehmend abzurechnende Ereignisse, die Ihre Kosten erhöhen, doch wenn Sie nicht ständig unter maximaler Auslastung indizieren, können Sie Skalierung für die Dauer des Indizierungsprozesses hinzufügen und dann nach Abschluss der Indizierung Ressourcenebenen nach unten anpassen.Increasing replicas and partitions are billable events that increase your cost, but unless you are continuously indexing under maximum load, you can add scale for the duration of the indexing process, and then adjust resource levels downward after indexing is finished.

Verwenden von IndexernUse indexers

Mit Indexern werden externe Datenquellen nach durchsuchbaren Inhalten durchforstet.Indexers are used to crawl external data sources for searchable content. Mehrere Indexerfunktionen sind zwar nicht speziell für die Indizierung in großem Rahmen vorgesehen, jedoch besonders nützlich zur Aufnahme größerer Datasets:While not specifically intended for large-scale indexing, several indexer capabilities are particularly useful for accommodating larger data sets:

  • Mit Schedulern können Sie die Indizierung in regelmäßige Intervalle gliedern, sodass Sie sie im Laufe der Zeit verteilen können.Schedulers allow you to parcel out indexing at regular intervals so that you can spread it out over time.
  • Geplante Indizierung kann am letzten bekannten Haltepunkt fortgesetzt werden.Scheduled indexing can resume at the last known stopping point. Wenn eine Datenquelle innerhalb eines 24-Stunden-Zeitfensters nicht vollständig durchsucht wird, setzt der Indexer die Indizierung am nächsten Tag fort, unabhängig davon, wo er aufgehört hat.If a data source is not fully crawled within a 24-hour window, the indexer will resume indexing on day two at wherever it left off.
  • Partitionieren von Daten in kleinere einzelne Datenquellen ermöglicht die parallele Verarbeitung.Partitioning data into smaller individual data sources enables parallel processing. Sie können ein großes Dataset in kleinere Datasets aufteilen und dann mehrere Datenquellendefinitionen erstellen, die gleichzeitig indiziert werden können.You can break a large data set into smaller data sets, and then create multiple data source definitions that can be indexed in parallel.

Hinweis

Indexer sind datenquellenspezifisch, also eignet sich ein Indexeransatz nur für ausgewählte Datenquellen in Azure: SQL-Datenbank, Blobspeicher, Tabellenspeicher, Cosmos DB.Indexers are data-source-specific, so using an indexer approach is only viable for selected data sources on Azure: SQL Database, Blob storage, Table storage, Cosmos DB.

Geplante IndizierungScheduled indexing

Indexerzeitpläne sind ein wichtiger Mechanismus zum Verarbeiten von großen Datasets und für lang andauernde Prozesse wie Bildanalyse in einer Pipeline für die kognitive Suche.Indexer scheduling is an important mechanism for processing large data sets, as well as slow-running processes like image analysis in a cognitive search pipeline. Die Indexerverarbeitung wird innerhalb von 24 Stunden ausgeführt.Indexer processing operates within a 24-hour window. Wenn die Verarbeitung nicht innerhalb von 24 Stunden abgeschlossen ist, können Sie die Verhaltensweisen für die Indexerzeitplanung zu Ihrem Vorteil nutzen.If processing fails to finish within 24 hours, the behaviors of indexer scheduling can work to your advantage.

Standardmäßig startet die geplante Indizierung zu bestimmten Zeitintervallen. Dabei wird ein Vorgang in der Regel abgeschlossen, bevor die Indizierung zum nächsten geplanten Intervall fortgesetzt wird.By design, scheduled indexing starts at specific intervals, with a job typically completing before resuming at the next scheduled interval. Wenn der Vorgang jedoch nicht innerhalb des Intervalls abgeschlossen wird, wird der Indexer beendet, da ein Timeout auftritt.However, if processing does not complete within the interval, the indexer stops (because it ran out of time). Beim nächsten Intervall wird die Verarbeitung an der Stelle fortgesetzt, an der sie während des letzten Intervalls unterbrochen wurde. Dabei verfolgt das System nach, an welcher Stelle dies der Fall ist.At the next interval, processing resumes where it last left off, with the system keeping track of where that occurs.

Das heißt in der Praxis, dass Sie für Indexladungen, die sich über mehrere Tage erstrecken, einen 24-Stunden-Zeitplan für den Indexer festlegen können.In practical terms, for index loads spanning several days, you can put the indexer on a 24-hour schedule. Wenn eine Indizierung für den nächsten 24-Stunden-Zyklus fortgesetzt wird, startet diese bei dem letzten erfolgreich verarbeiteten Dokument neu.When indexing resumes for the next 24-hour cycle, it restarts at the last known good document. Auf diese Weise kann sich ein Indexer über mehrere Tage hinweg durch das Dokumentbacklog durcharbeiten, bis alle nicht verarbeitete Dokumente verarbeitet wurden.In this way, an indexer can work its way through a document backlog over a series of days until all unprocessed documents are processed. Weitere Informationen zu diesem Ansatz finden Sie unter Indizieren großer Datasets.For more information about this approach, see Indexing large datasets in Azure Blob storage. Weitere Informationen zum Festlegen der Zeitpläne im Allgemeinen finden Sie unter Erstellen von Indexer-REST-API oder How to schedule indexers for Azure Search (Festlegen eines Zeitplans für Indexer in Azure Search).For more information about setting schedules in general, see Create Indexer REST API or see How to schedule indexers for Azure Search.

Parallele IndizierungParallel indexing

Eine parallele Indizierungsstrategie basiert auf der gemeinsamen Indizierung mehrerer Datenquellen, wobei jede Datenquellendefinition eine Teilmenge der Daten angibt.A parallel indexing strategy is based on indexing multiple data sources in unison, where each data source definition specifies a subset of the data.

Für nicht routinemäßige, rechenintensive Indizierungsanforderungen – wie z.B. OCR bei gescannten Dokumenten in einer kognitiven Suchpipeline, bei der Bildanalyse oder Verarbeitung natürlicher Sprache – ist eine parallele Indizierungsstrategie häufig der richtige Ansatz für den Abschluss eines lang andauernden Prozesses in kürzestmöglicher Zeit.For non-routine, computationally intensive indexing requirements - such as OCR on scanned documents in a cognitive search pipeline, image analysis, or natural language processing - a parallel indexing strategy is often the right approach for completing a long-running process in the shortest time. Wenn Sie Abfrageanforderungen vermeiden oder einschränken können, ist die parallele Indizierung für einen Dienst, der simultan keine Anforderungen verarbeitet, Ihre beste Strategie für das Durcharbeiten einer großen Inhaltsmenge, die langsam verarbeitet wird.If you can eliminate or reduce query requests, parallel indexing on a service that is not simultaneously handling queries is your best strategy option for working through a large body of slow-processing content.

Parallele Verarbeitung verfügt über die folgenden Elemente:Parallel processing has these elements:

  • Verteilen Sie Ihre Quelldaten auf mehrere Container oder mehrere virtuelle Ordner innerhalb desselben Containers.Subdivide source data among multiple containers or multiple virtual folders inside the same container.
  • Ordnen Sie jedes noch so kleine Dataset einer eigenen Datenquelle zu, die an einen eignen Indexer gekoppelt ist.Map each mini data set to its own data source, paired to its own indexer.
  • Verweisen Sie für die kognitive Suche in jeder Indexerdefinition auf dieselbe Fähigkeitsgruppe.For cognitive search, reference the same skillset in each indexer definition.
  • Schreiben Sie in denselben Suchindex für das Ziel.Write into the same target search index.
  • Legen Sie für die Ausführung aller Indexer denselben Zeitpunkt fest.Schedule all indexers to run at the same time.

Hinweis

Azure Search unterstützt das Dedizieren von Replikaten oder Partitionen auf bestimmte Workloads nicht.Azure Search does not support dedicating replicas or partitions to specific workloads. Es besteht ein erhöhtes Risiko, dass die gleichzeitige Indizierung Ihr System so belastet, dass die Abfrageleistung beeinträchtigt wird.The risk of heavy concurrent indexing is overburdening your system to the detriment of query performance. Wenn Sie über eine Testumgebung verfügen, implementieren Sie die parallele Indizierung dort zuerst, um die Vor- und Nachteile nachvollziehen zu können.If you have a test environment, implement parallel indexing there first to understand the tradeoffs.

Konfigurieren der parallelen IndizierungHow to configure parallel indexing

Für Indexer basiert die Verarbeitung der Kapazität grob auf einem Indexersubsystem für jede Diensteinheit, die von Ihrem Suchdienst verwendet wird.For indexers, processing capacity is loosely based on one indexer subsystem for each service unit (SU) used by your search service. Für Azure Search-Dienste, die für die Tarife Basic und Standard verfügbar sind, sind mehrere gleichzeitige Indexer möglich, die mindestens zwei Replikate aufweisen.Multiple concurrent indexers are possible on Azure Search services provisioned on Basic or Standard tiers having at least two replicas.

  1. Prüfen Sie im Azure-Portal auf der Dashboardseite Übersicht des Search-Diensts den Tarif, um festzustellen, ob die parallele Indizierung notwendig ist.In the Azure portal, on your search service dashboard Overview page, check the Pricing tier to confirm it can accommodate parallel indexing. Sowohl der Basic- als auch der Standard-Tarif umfassen mehrere Replikate.Both Basic and Standard tiers offer multiple replicas.

  2. Erhöhen Sie die Anzahl der Replikate unter Einstellungen > Staffelung um ein zusätzliches Replikat für jede Indexerworkload.In Settings > Scale, increase replicas for parallel processing: one additional replica for each indexer workload. Geben Sie eine ausreichende Zahl für bestehende Abfragevolumen an.Leave a sufficient number for existing query volume. Es sollten keine Abfrageworkloads für die Indizierung geopfert werden.Sacrificing query workloads for indexing is not a good tradeoff.

  3. Teilen Sie Daten auf mehrere Container auf. Tun Sie dies auf einer Ebene, die von den Azure Search-Indexern erreicht werden kann.Distribute data into multiple containers at a level that Azure Search indexers can reach. Also z.B. auf mehrere Tabellen in Azure SQL-Datenbank, auf mehrere Container im Azure Blob-Speicher oder auf mehrere Sammlungen.This could be multiple tables in Azure SQL Database, multiple containers in Azure Blob storage, or multiple collections. Definieren Sie ein Datenquellobjekt pro Tabelle oder Container.Define one data source object for each table or container.

  4. Erstellen Sie mehrere Indexer, und planen Sie eine parallele Ausführung:Create and schedule multiple indexers to run in parallel:

    • Gehen Sie von einem Dienst mit sechs Replikaten aus.Assume a service with six replicas. Konfigurieren Sie sechs Indizes, wobei jeder einer Datenquelle zugeordnet ist, die ein Sechstel des Datasets enthält, sodass Sie das gesamte Dataset auf sechs Teile aufteilen können.Configure six indexers, each one mapped to a data source containing one-sixth of the data set for a 6-way split of the entire data set.

    • Richten Sie alle Indexer auf einen Index aus.Point each indexer to the same index. Richten Sie für kognitive Suchworkloads alle Indexer auf eine Fähigkeitsgruppe aus.For cognitive search workloads, point each indexer to the same skillset.

    • Legen Sie innerhalb sämtlicher Indexerdefinitionen denselben Zeitplan für das Ausführungsmuster für die Runtime fest.Within each indexer definition, schedule the same run-time execution pattern. Beispielsweise erstellt "schedule" : { "interval" : "PT8H", "startTime" : "2018-05-15T00:00:00Z" } für den 15.5.2018 einen Zeitplan für alle Indexer, die in Intervallen von acht Stunden ausgeführt werden.For example, "schedule" : { "interval" : "PT8H", "startTime" : "2018-05-15T00:00:00Z" } creates a schedule on 2018-05-15 on all indexers, running at eight-hour intervals.

Zum festgelegten Zeitpunkt beginnen sämtliche Indexer mit der Ausführung, dem Laden von Daten, der Anwendung von Anreicherungen (wenn Sie eine Pipeline für die kognitive Suche konfiguriert haben) und dem Schreiben in den Index.At the scheduled time, all indexers begin execution, loading data, applying enrichments (if you configured a cognitive search pipeline), and writing to the index. Azure Search sperrt den Index für Updates nicht.Azure Search does not lock the index for updates. Gleichzeitige Schreibvorgänge werden verwaltet und wiederholt, wenn ein bestimmter Schreibvorgang beim ersten Mal nicht erfolgreich ausgeführt werden kann.Concurrent writes are managed, with retry if a particular write does not succeed on first attempt.

Hinweis

Wenn Sie die Anzahl der Replikate erhöhen, sollten Sie auch die Anzahl der Partitionen erhöhen, wenn zu erwarten ist, dass der Index deutlich vergrößert wird.When increasing replicas, consider increasing the partition count if index size is projected to increase significantly. Partitionen speichern einzelne Segmente des indizierten Inhalts. Je mehr Partitionen Sie besitzen, desto kleiner sind die einzelnen Segmente, die darin gespeichert werden müssen.Partitions store slices of indexed content; the more partitions you have, the smaller the slice each one has to store.

Weitere InformationenSee also