Indizieren von Dokumenten in Azure Blob Storage mit Azure SearchIndexing Documents in Azure Blob Storage with Azure Search

Dieser Artikel beschreibt, wie Sie Azure Search zum Indizieren von Dokumenten (z.B. PDF- oder Microsoft Office-Dokumente und verschiedene andere gängige Formate) verwenden, die in Azure Blob Storage gespeichert sind.This article shows how to use Azure Search to index documents (such as PDFs, Microsoft Office documents, and several other common formats) stored in Azure Blob storage. Zunächst werden grundlegende Informationen zu Einrichten und Konfigurieren eines Blobindexers erläutert.First, it explains the basics of setting up and configuring a blob indexer. Anschließend folgt eine ausführlichere Betrachtung der Verhaltensweisen und Szenarien, die Ihnen voraussichtlich begegnen.Then, it offers a deeper exploration of behaviors and scenarios you are likely to encounter.

Unterstützte DokumentformateSupported document formats

Der Blobindexer kann Text aus den folgenden Dokumentformaten extrahieren:The blob indexer can extract text from the following document formats:

Einrichten der BlobindizierungSetting up blob indexing

Sie können einen Azure Blob Storage-Indexer über folgende Elemente einrichten:You can set up an Azure Blob Storage indexer using:

Hinweis

Einige Features (z.B. Feldzuordnungen) sind im Portal noch nicht verfügbar und müssen programmgesteuert verwendet werden.Some features (for example, field mappings) are not yet available in the portal, and have to be used programmatically.

Hier wird der Ablauf unter Verwendung der REST-API veranschaulicht.Here, we demonstrate the flow using the REST API.

Schritt 1: Erstellen einer DatenquelleStep 1: Create a data source

Eine Datenquelle gibt an, welche Daten indiziert werden müssen. Sie legt außerdem die Anmeldeinformationen für den Zugriff auf die Daten sowie die Richtlinien fest, mit denen Änderungen an den Daten effizient identifiziert werden können (z.B. neue, geänderte oder gelöschte Zeilen).A data source specifies which data to index, credentials needed to access the data, and policies to efficiently identify changes in the data (new, modified, or deleted rows). Eine Datenquelle kann von mehreren Indexern im selben Suchdienst verwendet werden.A data source can be used by multiple indexers in the same search service.

Für die Blobindizierung muss die Datenquelle über die folgenden erforderlichen Eigenschaften verfügen:For blob indexing, the data source must have the following required properties:

  • name ist der eindeutige Name der Datenquelle im Suchdienst.name is the unique name of the data source within your search service.
  • type muss azureblob lauten.type must be azureblob.
  • Mit credentials wird die Speicherkonto-Verbindungszeichenfolge als credentials.connectionString-Parameter angegeben.credentials provides the storage account connection string as the credentials.connectionString parameter. Details finden Sie weiter unten unter Angeben von Anmeldeinformationen.See How to specify credentials below for details.
  • Mit container wird ein Container in Ihrem Speicherkonto angegeben.container specifies a container in your storage account. Standardmäßig können alle Blobs im Container abgerufen werden.By default, all blobs within the container are retrievable. Wenn Sie nur Blobs in einem bestimmten virtuellen Verzeichnis indizieren möchten, können Sie dieses Verzeichnis mit dem optionalen query-Parameter angeben.If you only want to index blobs in a particular virtual directory, you can specify that directory using the optional query parameter.

So erstellen Sie eine Datenquelle:To create a data source:

POST https://[service name].search.windows.net/datasources?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
    "container" : { "name" : "my-container", "query" : "<optional-virtual-directory-name>" }
}   

Weitere Informationen über die API zum Erstellen einer Datenquelle finden Sie unter Datenquelle erstellen.For more on the Create Datasource API, see Create Datasource.

Angeben von AnmeldeinformationenHow to specify credentials

Sie haben folgende Möglichkeiten zum Angeben der Anmeldeinformationen für den Blobcontainer:You can provide the credentials for the blob container in one of these ways:

  • Verbindungszeichenfolge für den Vollzugriff auf ein Speicherkonto: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key> Sie können die Verbindungszeichenfolge über das Azure-Portal abrufen, indem Sie auf dem Blatt des Speicherkontos zu „Einstellungen“ > „Schlüssel“ (für klassische Speicherkonten) oder zu „Einstellungen“ > „Zugriffsschlüssel“ (für Azure Resource Manager-Speicherkonten) navigieren.Full access storage account connection string: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key> You can get the connection string from the Azure portal by navigating to the storage account blade > Settings > Keys (for Classic storage accounts) or Settings > Access keys (for Azure Resource Manager storage accounts).
  • Verbindungszeichenfolge für eine Shared Access Signature (SAS) für ein Speicherkonto: BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rl Die SAS muss über Listen- und Leseberechtigungen für Container und Objekte (in diesem Fall Blobs) verfügen.Storage account shared access signature (SAS) connection string: BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rl The SAS should have the list and read permissions on containers and objects (blobs in this case).
  • Shared Access Signature des Containers: ContainerSharedAccessUri=https://<your storage account>.blob.core.windows.net/<container name>?sv=2016-05-31&sr=c&sig=<the signature>&se=<the validity end time>&sp=rl Die SAS muss über Listen- und Leseberechtigungen für den Container verfügen.Container shared access signature: ContainerSharedAccessUri=https://<your storage account>.blob.core.windows.net/<container name>?sv=2016-05-31&sr=c&sig=<the signature>&se=<the validity end time>&sp=rl The SAS should have the list and read permissions on the container.

Weitere Informationen zu Shared Access Signatures von Speichern finden Sie unter Verwenden von Shared Access Signatures (SAS).For more info on storage shared access signatures, see Using Shared Access Signatures.

Hinweis

Bei Verwendung von SAS-Anmeldeinformationen müssen Sie die Anmeldedaten für die Datenquellen in regelmäßigen Abständen mit erneuerten Signaturen aktualisieren, um den Ablauf zu verhindern.If you use SAS credentials, you will need to update the data source credentials periodically with renewed signatures to prevent their expiration. Falls SAS-Anmeldedaten ablaufen, tritt beim Indexer ein Fehler mit ungefähr folgender Fehlermeldung auf: Credentials provided in the connection string are invalid or have expired..If SAS credentials expire, the indexer will fail with an error message similar to Credentials provided in the connection string are invalid or have expired..

Schritt 2: Erstellen eines IndexStep 2: Create an index

Mit dem Index werden die Felder in einem Dokument, Attribute und andere Konstrukte für die Suchoberfläche angegeben.The index specifies the fields in a document, attributes, and other constructs that shape the search experience.

Hier sehen Sie, wie Sie einen Index mit einem durchsuchbaren content-Feld zum Speichern des aus Blobs extrahierten Texts erstellen:Here's how to create an index with a searchable content field to store the text extracted from blobs:

POST https://[service name].search.windows.net/indexes?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
      "name" : "my-target-index",
      "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
      ]
}

Weitere Informationen zum Erstellen von Indizes finden Sie unter Create Index (Index erstellen).For more on creating indexes, see Create Index

Schritt 3: Erstellen eines IndexersStep 3: Create an indexer

Ein Indexer verbindet eine Datenquelle mit einem Zielsuchindex und stellt einen Zeitplan zur Automatisierung der Datenaktualisierung bereit.An indexer connects a data source with a target search index, and provides a schedule to automate the data refresh.

Nach der Erstellung von Index und Datenquelle können Sie den Indexer erstellen:Once the index and data source have been created, you're ready to create the indexer:

POST https://[service name].search.windows.net/indexers?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  "name" : "blob-indexer",
  "dataSourceName" : "blob-datasource",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" }
}

Dieser Indexer wird alle zwei Stunden ausgeführt (das Planungsintervall wird auf „PT2H“ festgelegt).This indexer will run every two hours (schedule interval is set to "PT2H"). Um einen Indexer alle 30 Minuten auszuführen, legen Sie das Intervall auf „PT30M“ fest.To run an indexer every 30 minutes, set the interval to "PT30M". Das kürzeste unterstützte Intervall beträgt fünf Minuten.The shortest supported interval is 5 minutes. Der Zeitplan ist optional. Ohne Zeitplan wird ein Indexer nur einmal bei seiner Erstellung ausgeführt.The schedule is optional - if omitted, an indexer runs only once when it's created. Allerdings können Sie ein Indexer bei Bedarf jederzeit ausführen.However, you can run an indexer on-demand at any time.

Weitere Informationen zur API zum Erstellen eines Indexers finden Sie unter Erstellen eines Indexers.For more details on the Create Indexer API, check out Create Indexer.

Weitere Informationen zum Definieren von Indexerzeitplänen finden Sie unter Indexerzeitpläne für Azure Search.For more information about defining indexer schedules see How to schedule indexers for Azure Search.

Wie indiziert Azure Search Blobs?How Azure Search indexes blobs

Je nach Indexer-Konfiguration, kann der Blobindexer Metadaten und Textinhalt, Speicher- und Inhaltsmetadaten oder nur Speichermetadaten indizieren (nützlich, wenn Sie nur die Metadaten interessieren und den Inhalt des Blobs nicht indizieren müssen).Depending on the indexer configuration, the blob indexer can index storage metadata only (useful when you only care about the metadata and don't need to index the content of blobs), storage and content metadata, or both metadata and textual content. Der Indexer extrahiert standardmäßig sowohl die Metadaten als auch den Inhalt.By default, the indexer extracts both metadata and content.

Hinweis

Die Blobs mit strukturiertem Inhalt wie JSON oder CSV werden standardmäßig als ein einzelnes Textsegment indiziert.By default, blobs with structured content such as JSON or CSV are indexed as a single chunk of text. Wenn Sie JSON- und CSV-Blobs in einem strukturierten Verfahren indizieren möchten, finden Sie weitere Informationen unter Indizieren von JSON-Blobs und Indizieren von CSV-Blobs.If you want to index JSON and CSV blobs in a structured way, see Indexing JSON blobs and Indexing CSV blobs for more information.

Ein Verbunddokument oder eingebettetes Dokument (z.B. ein ZIP-Archiv oder ein Word-Dokument mit eingebetteter Outlook-E-Mail mit Anhängen) wird ebenfalls als einzelnes Dokument indiziert.A compound or embedded document (such as a ZIP archive or a Word document with embedded Outlook email containing attachments) is also indexed as a single document.

  • Der Textinhalt des Dokuments wird in ein Zeichenfolgefeld mit dem Namen content extrahiert.The textual content of the document is extracted into a string field named content.

Hinweis

Azure Search beschränkt die Menge des extrahierten Texts abhängig vom Tarif: 32.000 Zeichen für den Tarif „Free“, 64.000 Zeichen für den Tarif „Basic“ und 4 Millionen Zeichen für die Tarife „Standard“, „Standard S2“ und „Standard S3“.Azure Search limits how much text it extracts depending on the pricing tier: 32,000 characters for Free tier, 64,000 for Basic, and 4 million for Standard, Standard S2 and Standard S3 tiers. Für gekürzte Dokumente wird eine Warnung in die Statusantwort des Indexers einbezogen.A warning is included in the indexer status response for truncated documents.

  • Falls für das Blob vom Benutzer angegebene Metadateneigenschaften vorhanden sind, werden diese „Wort für Wort“ extrahiert.User-specified metadata properties present on the blob, if any, are extracted verbatim.

  • Standardmäßige Blob-Metadateneigenschaften werden in die folgenden Felder extrahiert:Standard blob metadata properties are extracted into the following fields:

    • metadata_storage_name (Edm.String): der Dateiname des Blobs.metadata_storage_name (Edm.String) - the file name of the blob. Für ein Blob mit dem Namen „/my-container/my-folder/subfolder/resume.pdf“ lautet der Wert dieses Felds beispielsweise resume.pdf.For example, if you have a blob /my-container/my-folder/subfolder/resume.pdf, the value of this field is resume.pdf.
    • metadata_storage_path (Edm.String): der vollständige URI des Blobs, einschließlich Speicherkonto.metadata_storage_path (Edm.String) - the full URI of the blob, including the storage account. Zum Beispiel, https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdfFor example, https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdf
    • metadata_storage_content_type (Edm.String): Inhaltstyp, der mit dem Code angegeben wird, den Sie zum Hochladen des Blobs verwendet haben.metadata_storage_content_type (Edm.String) - content type as specified by the code you used to upload the blob. Beispiel: application/octet-stream.For example, application/octet-stream.
    • metadata_storage_last_modified (Edm.DateTimeOffset): Zeitstempel der letzten Änderung für das Blob.metadata_storage_last_modified (Edm.DateTimeOffset) - last modified timestamp for the blob. In Azure Search wird dieser Zeitstempel zum Identifizieren geänderter Blobs verwendet, um die erneute Indizierung aller Elemente nach der ersten Indizierung zu vermeiden.Azure Search uses this timestamp to identify changed blobs, to avoid reindexing everything after the initial indexing.
    • metadata_storage_size (Edm.Int64): Blob-Größe in Byte.metadata_storage_size (Edm.Int64) - blob size in bytes.
    • metadata_storage_content_md5 (Edm.String): MD5-Hash des Blob-Inhalts, falls verfügbar.metadata_storage_content_md5 (Edm.String) - MD5 hash of the blob content, if available.
    • metadata_storage_sas_token (Edm.String): ein temporäres SAS-Token, das von benutzerdefinierten Qualifikationen verwendet werden kann, um Zugriff auf den Blob zu erhalten.metadata_storage_sas_token (Edm.String) - A temporary SAS token that can be used by custom skills to get access to the blob. Dieses Token sollte nicht zur späteren Verwendung gespeichert werden, da es ablaufen kann.This token should not be stored for later use as it might expire.
  • Die Metadateneigenschaften der einzelnen Dokumentformate werden in die hier aufgeführten Felder extrahiert.Metadata properties specific to each document format are extracted into the fields listed here.

Es ist nicht erforderlich, Felder für alle obigen Eigenschaften in Ihrem Suchindex zu definieren. Erfassen Sie einfach die Eigenschaften, die Sie für Ihre Anwendung benötigen.You don't need to define fields for all of the above properties in your search index - just capture the properties you need for your application.

Hinweis

Die Feldnamen im vorhandenen Index unterscheiden sich von den Feldnamen, die während der Dokumentextrahierung generiert werden.Often, the field names in your existing index will be different from the field names generated during document extraction. Sie können Feldzuordnungen verwenden, um die von Azure Search bereitgestellten Eigenschaftennamen den Feldnamen in Ihrem Suchindex zuzuordnen.You can use field mappings to map the property names provided by Azure Search to the field names in your search index. Weiter unten finden Sie ein Beispiel für die Verwendung von Feldzuordnungen.You will see an example of field mappings use below.

Definieren von Dokumentschlüsseln und FeldzuordnungenDefining document keys and field mappings

In Azure Search wird ein Dokument mit dem Dokumentschlüssel eindeutig identifiziert.In Azure Search, the document key uniquely identifies a document. Jeder Suchindex muss über genau ein Schlüsselfeld vom Typ „Edm.String“ verfügen.Every search index must have exactly one key field of type Edm.String. Das Schlüsselfeld ist für jedes Dokument erforderlich, das dem Index hinzugefügt wird (es ist auch das einzige erforderliche Feld).The key field is required for each document that is being added to the index (it is actually the only required field).

Sie sollten sorgfältig abwägen, welches extrahierte Feld Sie dem Schlüsselfeld für Ihren Index zuordnen.You should carefully consider which extracted field should map to the key field for your index. Die Kandidaten lauten:The candidates are:

  • metadata_storage_name: Dies ist gegebenenfalls ein passender Kandidat. Beachten Sie aber, dass 1) die Namen unter Umständen nicht eindeutig sind, falls Blobs mit dem gleichen Namen in unterschiedlichen Ordnern enthalten sind, und 2) der Name Zeichen enthalten kann, die in Dokumentschlüsseln ungültig sind, z.B. Bindestriche.metadata_storage_name - this might be a convenient candidate, but note that 1) the names might not be unique, as you may have blobs with the same name in different folders, and 2) the name may contain characters that are invalid in document keys, such as dashes. Als Lösung für ungültige Zeichen können Sie die base64Encode-Feldzuordnungsfunktion verwenden. Denken Sie in diesem Fall daran, die Dokumentschlüssel zu codieren, wenn Sie sie in API-Aufrufen übergeben, z.B. bei einem Lookup.You can deal with invalid characters by using the base64Encode field mapping function - if you do this, remember to encode document keys when passing them in API calls such as Lookup. (Unter .NET können Sie hierfür beispielsweise die UrlTokenEncode-Methode verwenden.)(For example, in .NET you can use the UrlTokenEncode method for that purpose).
  • metadata_storage_path: Die Verwendung des vollständigen Pfads sorgt für Eindeutigkeit, aber der Pfad enthält auf jeden Fall /-Zeichen, die in einem Dokumentschlüssel ungültig sind.metadata_storage_path - using the full path ensures uniqueness, but the path definitely contains / characters that are invalid in a document key. Wie oben auch, haben Sie hierbei die Möglichkeit, die Schlüssel mit der base64Encode-Funktion zu codieren.As above, you have the option of encoding the keys using the base64Encode function.
  • Falls keine der Optionen oben für Sie geeignet ist, können Sie den Blobs eine benutzerdefinierte Metadateneigenschaft hinzufügen.If none of the options above work for you, you can add a custom metadata property to the blobs. Bei dieser Option ist es aber erforderlich, dass diese Metadateneigenschaft im Rahmen des Blob-Uploadvorgangs allen Blobs hinzugefügt wird.This option does, however, require your blob upload process to add that metadata property to all blobs. Da der Schlüssel eine erforderliche Eigenschaft ist, tritt für alle Blobs, die nicht über diese Eigenschaft verfügen, beim Indizieren ein Fehler auf.Since the key is a required property, all blobs that don't have that property will fail to be indexed.

Wichtig

Wenn keine ausdrückliche Zuordnung für das Schlüsselfeld im Index vorhanden ist, wird in Azure Search automatisch metadata_storage_path als Schlüssel verwendet, und die Schlüsselwerte werden Base64-codiert (zweite Option oben).If there is no explicit mapping for the key field in the index, Azure Search automatically uses metadata_storage_path as the key and base-64 encodes key values (the second option above).

Für dieses Beispiel wählen wir das Feld metadata_storage_name als Dokumentschlüssel aus.For this example, let's pick the metadata_storage_name field as the document key. Nehmen wir außerdem an, dass Ihr Index über ein Schlüsselfeld mit dem Namen key und ein Feld fileSize zum Speichern der Dokumentgröße verfügt.Let's also assume your index has a key field named key and a field fileSize for storing the document size. Um alles wie gewünscht einzurichten, geben Sie die folgenden Feldzuordnungen an, wenn Sie den Indexer erstellen oder aktualisieren:To wire things up as desired, specify the following field mappings when creating or updating your indexer:

"fieldMappings" : [
  { "sourceFieldName" : "metadata_storage_name", "targetFieldName" : "key", "mappingFunction" : { "name" : "base64Encode" } },
  { "sourceFieldName" : "metadata_storage_size", "targetFieldName" : "fileSize" }
]

Hier wird beschrieben, wie Sie Feldzuordnungen hinzufügen und die Base64-Codierung von Schlüsseln für einen Indexer aktivieren, um alle Elemente zu verknüpfen:To bring this all together, here's how you can add field mappings and enable base-64 encoding of keys for an existing indexer:

PUT https://[service name].search.windows.net/indexers/blob-indexer?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  "dataSourceName" : " blob-datasource ",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" },
  "fieldMappings" : [
    { "sourceFieldName" : "metadata_storage_name", "targetFieldName" : "key", "mappingFunction" : { "name" : "base64Encode" } },
    { "sourceFieldName" : "metadata_storage_size", "targetFieldName" : "fileSize" }
  ]
}

Hinweis

Weitere Informationen zu Feldzuordnungen finden Sie in diesem Artikel.To learn more about field mappings, see this article.

Steuern, welche Blobs indiziert werdenControlling which blobs are indexed

Sie können steuern, welche Blobs indiziert und welche übersprungen werden.You can control which blobs are indexed, and which are skipped.

Indizieren von Blobs mit bestimmten DateierweiterungenIndex only the blobs with specific file extensions

Sie können nur die Blobs mit den Dateinamenerweiterungen indizieren, die Sie über den indexedFileNameExtensions-Konfigurationsparameter des Indexers angeben.You can index only the blobs with the file name extensions you specify by using the indexedFileNameExtensions indexer configuration parameter. Der Wert ist eine Zeichenfolge mit einer durch Trennzeichen getrennte Liste von Dateierweiterungen (mit einem vorangestellten Punkt).The value is a string containing a comma-separated list of file extensions (with a leading dot). Um beispielsweise nur die PDF- und DOCX-Blobs zu indizieren, gehen Sie folgendermaßen vor:For example, to index only the .PDF and .DOCX blobs, do this:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }
}

Ausschließen von Blobs mit bestimmten DateierweiterungenExclude blobs with specific file extensions

Mithilfe des excludedFileNameExtensions-Konfigurationsparameters können Sie verhindern, dass Blobs mit bestimmten Dateinamenerweiterungen indiziert werden.You can exclude blobs with specific file name extensions from indexing by using the excludedFileNameExtensions configuration parameter. Der Wert ist eine Zeichenfolge mit einer durch Trennzeichen getrennte Liste von Dateierweiterungen (mit einem vorangestellten Punkt).The value is a string containing a comma-separated list of file extensions (with a leading dot). Um beispielsweise alle Blobs mit Ausnahme von Blobs mit den Erweiterungen PNG und JPEG zu indizieren, gehen Sie folgendermaßen vor:For example, to index all blobs except those with the .PNG and .JPEG extensions, do this:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "excludedFileNameExtensions" : ".png,.jpeg" } }
}

Wenn sowohl der indexedFileNameExtensions- als auch der excludedFileNameExtensions-Parameter vorhanden ist, untersucht Azure Search zunächst indexedFileNameExtensions und danach excludedFileNameExtensions.If both indexedFileNameExtensions and excludedFileNameExtensions parameters are present, Azure Search first looks at indexedFileNameExtensions, then at excludedFileNameExtensions. Das heißt, wenn die gleiche Dateierweiterung in beiden Listen vorhanden ist, wird sie von der Indizierung ausgeschlossen.This means that if the same file extension is present in both lists, it will be excluded from indexing.

Steuern, welche Teile des Blobs indiziert werdenControlling which parts of the blob are indexed

Sie können mithilfe des Konfigurationsparameters dataToExtract steuern, welche Teile der Blobs indiziert werden.You can control which parts of the blobs are indexed using the dataToExtract configuration parameter. Die folgenden Werte sind möglich:It can take the following values:

Verwenden Sie z.B. Folgendes, um nur die Speichermetadaten zu indizieren:For example, to index only the storage metadata, use:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "dataToExtract" : "storageMetadata" } }
}

Verwenden von Blob-Metadaten, um zu steuern, wie Blobs indiziert werdenUsing blob metadata to control how blobs are indexed

Die oben beschriebenen Konfigurationsparameter werden auf alle Blobs angewendet.The configuration parameters described above apply to all blobs. In manchen Fällen möchten Sie möglicherweise steuern, wie einzelne Blobs indiziert werden.Sometimes, you may want to control how individual blobs are indexed. Dies ist möglich, indem Sie die folgenden Eigenschaften und Werte der Blob-Metadaten hinzufügen:You can do this by adding the following blob metadata properties and values:

EigenschaftennameProperty name EigenschaftswertProperty value ErklärungExplanation
AzureSearch_SkipAzureSearch_Skip „true“"true" Weist den Blobindexer an, das Blob vollständig zu überspringen.Instructs the blob indexer to completely skip the blob. Weder die Metadaten- noch die Inhaltsextraktion werden versucht.Neither metadata nor content extraction is attempted. Dies ist nützlich, wenn ein bestimmtes Blob wiederholt fehlschlägt und den Indizierungsprozess unterbricht.This is useful when a particular blob fails repeatedly and interrupts the indexing process.
AzureSearch_SkipContentAzureSearch_SkipContent „true“"true" Dies entspricht der oben beschriebenen Einstellung "dataToExtract" : "allMetadata" zu einem bestimmten Blob.This is equivalent of "dataToExtract" : "allMetadata" setting described above scoped to a particular blob.

FehlerkorrekturDealing with errors

Der Blobindexer wird standardmäßig beendet, sobald ein Blob mit einem nicht unterstützten Inhaltstyp (z.B. ein Bild) gefunden wird.By default, the blob indexer stops as soon as it encounters a blob with an unsupported content type (for example, an image). Natürlich können Sie den Parameter excludedFileNameExtensions nutzen, um bestimmte Inhaltstypen zu überspringen.You can of course use the excludedFileNameExtensions parameter to skip certain content types. Allerdings müssen Sie möglicherweise Blobs indizieren, ohne im Voraus alle möglichen Inhaltstypen zu kennen.However, you may need to index blobs without knowing all the possible content types in advance. Legen Sie zum Fortsetzen der Indizierung beim Auftreten eines nicht unterstützten Inhaltstyps den Konfigurationsparameter failOnUnsupportedContentType auf false fest:To continue indexing when an unsupported content type is encountered, set the failOnUnsupportedContentType configuration parameter to false:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "failOnUnsupportedContentType" : false } }
}

Für einige Blobs kann Azure Search den Inhaltstyp nicht bestimmen oder ist nicht in der Lage, ein Dokument mit eigentlich unterstütztem Inhaltstyp zu verarbeiten.For some blobs, Azure Search is unable to determine the content type, or unable to process a document of otherwise supported content type. Um diesen Fehlermodus zu ignorieren, legen Sie den Konfigurationsparameter failOnUnprocessableDocument auf FALSE fest:To ignore this failure mode, set the failOnUnprocessableDocument configuration parameter to false:

  "parameters" : { "configuration" : { "failOnUnprocessableDocument" : false } }

Azure Search schränkt die Größe der indizierten Blobs ein.Azure Search limits the size of blobs that are indexed. Diese Grenzwerte werden in Grenzwerte für den Azure Search-Dienst dokumentiert.These limits are documented in Service Limits in Azure Search. Zu große Blobs werden standardmäßig als Fehler behandelt.Oversized blobs are treated as errors by default. Sie können jedoch weiterhin Speichermetadaten übergroßer Blobs indizieren, wenn Sie den Konfigurationsparameter indexStorageMetadataOnlyForOversizedDocuments auf „true“ setzen:However, you can still index storage metadata of oversized blobs if you set indexStorageMetadataOnlyForOversizedDocuments configuration parameter to true:

"parameters" : { "configuration" : { "indexStorageMetadataOnlyForOversizedDocuments" : true } }

Sie können die Indizierung auch fortsetzen, wenn an einem beliebigen Punkt der Verarbeitung Fehler auftreten, entweder bei der Analyse von Blobs oder beim Hinzufügen von Dokumenten zu einem Index.You can also continue indexing if errors happen at any point of processing, either while parsing blobs or while adding documents to an index. Um eine bestimmte Anzahl von Fehlern zu ignorieren, legen Sie die Konfigurationsparameter maxFailedItems und maxFailedItemsPerBatch auf die gewünschten Werte fest.To ignore a specific number of errors, set the maxFailedItems and maxFailedItemsPerBatch configuration parameters to the desired values. Beispiel:For example:

{
  ... other parts of indexer definition
  "parameters" : { "maxFailedItems" : 10, "maxFailedItemsPerBatch" : 10 }
}

Inkrementelle Indizierung und Erkennung von LöschungenIncremental indexing and deletion detection

Wenn Sie einen Blob-Indexer zur Ausführung nach einem Zeitplan einrichten, werden nur die geänderten Blobs neu indiziert. Dies wird anhand des LastModified-Zeitstempels der Blobs ermittelt.When you set up a blob indexer to run on a schedule, it reindexes only the changed blobs, as determined by the blob's LastModified timestamp.

Hinweis

Sie müssen keine Richtlinie zum Erkennen von Änderungen angeben. Die inkrementelle Indizierung wird für Sie automatisch indiziert.You don't have to specify a change detection policy – incremental indexing is enabled for you automatically.

Damit das Löschen von Dokumenten unterstützt wird, sollten Sie die Strategie des „vorläufigen Löschens“ anwenden.To support deleting documents, use a "soft delete" approach. Wenn Sie die Blobs direkt löschen, werden die entsprechenden Dokumente nicht aus dem Suchindex entfernt.If you delete the blobs outright, corresponding documents will not be removed from the search index. Führen Sie stattdessen die folgenden Schritte aus:Instead, use the following steps:

  1. Fügen Sie dem Blob eine benutzerdefinierte Metadateneigenschaft hinzu, um in Azure Search anzugeben, dass es logisch gelöscht wird.Add a custom metadata property to the blob to indicate to Azure Search that it is logically deleted
  2. Konfigurieren Sie für die Datenquelle eine Richtlinie zur Erkennung des vorläufigen Löschens.Configure a soft deletion detection policy on the data source
  3. Nachdem das Blob mit dem Indexer verarbeitet wurde (wie durch die API für den Indexerstatus gezeigt), können Sie das Blob physisch löschen.Once the indexer has processed the blob (as shown by the indexer status API), you can physically delete the blob

Bei der folgenden Richtlinie wird ein Blob beispielsweise als gelöscht angesehen, wenn es über die Metadateneigenschaft IsDeleted mit dem Wert true verfügt:For example, the following policy considers a blob to be deleted if it has a metadata property IsDeleted with the value true:

PUT https://[service name].search.windows.net/datasources/blob-datasource?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "<your storage connection string>" },
    "container" : { "name" : "my-container", "query" : "my-folder" },
    "dataDeletionDetectionPolicy" : {
        "@odata.type" :"#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",     
        "softDeleteColumnName" : "IsDeleted",
        "softDeleteMarkerValue" : "true"
    }
}   

Indizieren großer DatasetsIndexing large datasets

Das Indizieren von Blobs kann sehr zeitaufwändig sein.Indexing blobs can be a time-consuming process. In Fällen, in denen Sie Millionen von Blobs zu indizieren haben, können Sie durch das Partitionieren der Daten und Verwenden mehrerer Indexer zur parallelen Datenverarbeitung die Indizierung beschleunigen.In cases where you have millions of blobs to index, you can speed up indexing by partitioning your data and using multiple indexers to process the data in parallel. Sie können es folgendermaßen einrichten:Here's how you can set this up:

  • Partitionieren Sie Ihre Daten in mehrere Blobcontainer oder virtuelle Ordner.Partition your data into multiple blob containers or virtual folders

  • Richten Sie mehrere Azure Search-Datenquellen ein, eine pro Container oder Ordner.Set up several Azure Search data sources, one per container or folder. Verwenden Sie den Parameter query, um auf einen Blob-Ordner zu verweisen:To point to a blob folder, use the query parameter:

    {
        "name" : "blob-datasource",
        "type" : "azureblob",
        "credentials" : { "connectionString" : "<your storage connection string>" },
        "container" : { "name" : "my-container", "query" : "my-folder" }
    }
    
  • Erstellen Sie einen entsprechenden Indexer für jede Datenquelle.Create a corresponding indexer for each data source. Alle Indexer können auf den gleichen Zielsuchindex zeigen.All the indexers can point to the same target search index.

  • Eine Sucheinheit in Ihrem Dienst kann einen Indexer zu jeder angegebenen Uhrzeit ausführen.One search unit in your service can run one indexer at any given time. Das Erstellen von mehreren Indexern – wie oben beschrieben – ist nur nützlich, wenn sie tatsächlich parallel ausgeführt werden.Creating multiple indexers as described above is only useful if they actually run in parallel. Um mehrere Indexer parallel auszuführen, skalieren Sie Ihren Suchdienst horizontal hoch, indem Sie eine bestimmte Anzahl von Partitionen und Replikate erstellen.To run multiple indexers in parallel, scale out your search service by creating an appropriate number of partitions and replicas. Wenn Ihr Suchdienst beispielsweise über 6 Sucheinheiten verfügt (z.B. 2 Partitionen x 3 Replikate), dann können 6 Indexers simultan ausgeführt werden. Dies führt zu einem sechsfachen Anstieg des Indizierungsdurchsatzes.For example, if your search service has 6 search units (for example, 2 partitions x 3 replicas), then 6 indexers can run simultaneously, resulting in a six-fold increase in the indexing throughput. Um mehr über die Skalierung und Kapazitätsplanung zu erfahren, gehen Sie unter Skalieren von Ressourcenebenen für Abfrage und Indizierung von Arbeitslasten in Azure Search.To learn more about scaling and capacity planning, see Scale resource levels for query and indexing workloads in Azure Search.

Sie möchten möglicherweise Dokumente aus mehreren Quellen in Ihrem Index „zusammenbauen“.You may want to "assemble" documents from multiple sources in your index. Womöglich möchten Sie z.B. Text aus Blobs mit anderen Metadaten zusammenführen, die in Cosmos DB gespeichert sind.For example, you may want to merge text from blobs with other metadata stored in Cosmos DB. Sie können auch die Indizierungs-API mit Push zusammen mit unterschiedlichen Indexern zum Erstellen von Suchdokumenten aus mehreren Teilen verwenden.You can even use the push indexing API together with various indexers to build up search documents from multiple parts.

Damit dies funktioniert, müssen sich alle Indexer und andere Komponenten auf den Dokumentschlüssel einigen.For this to work, all indexers and other components need to agree on the document key. Eine ausführliche exemplarische Vorgehensweise finden Sie im externen Artikel: Combine documents with other data in Azure Search (Zusammenführen von Dokumenten mit anderen Daten in Azure Search).For a detailed walk-through, see this external article: Combine documents with other data in Azure Search.

Indizierung von Nur-TextIndexing plain text

Wenn alle Ihre Blobs Nur-Text in derselben Codierung enthalten, können Sie die Indizierungsleistung signifikant verbessern, indem Sie den Textanalysemodus nutzen.If all your blobs contain plain text in the same encoding, you can significantly improve indexing performance by using text parsing mode. Um den Textanalysemodus zu verwenden, legen Sie die parsingMode-Konfigurationseigenschaft auf text fest:To use text parsing mode, set the parsingMode configuration property to text:

PUT https://[service name].search.windows.net/indexers/[indexer name]?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "parsingMode" : "text" } }
}

Standardmäßig wird von der UTF-8-Codierung ausgegangen.By default, the UTF-8 encoding is assumed. Um eine andere Codierung anzugeben, verwenden Sie die encoding-Konfigurationseigenschaft.To specify a different encoding, use the encoding configuration property:

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "parsingMode" : "text", "encoding" : "windows-1252" } }
}

Inhaltstypspezifische MetadateneigenschaftenContent type-specific metadata properties

In der folgenden Tabelle sind die Verarbeitungsschritte für jedes Dokumentformat zusammengefasst, und es werden die Metadateneigenschaften beschrieben, die von Azure Search extrahiert werden.The following table summarizes processing done for each document format, and describes the metadata properties extracted by Azure Search.

Dokumentformat/InhaltstypDocument format / content type Inhaltstypspezifische MetadateneigenschaftenContent-type specific metadata properties VerarbeitungsdetailsProcessing details
HTML (text/html)HTML (text/html) metadata_content_encoding
metadata_content_type
metadata_language
metadata_description
metadata_keywords
metadata_title
Entfernen von HTML-Markup und Extrahieren von TextStrip HTML markup and extract text
PDF (application/pdf)PDF (application/pdf) metadata_content_type
metadata_language
metadata_author
metadata_title
Extrahieren von Text, z. B. eingebettete Dokumente (mit Ausnahme von Bildern)Extract text, including embedded documents (excluding images)
DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document)DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
Extrahieren von Text, z. B. eingebettete DokumenteExtract text, including embedded documents
DOC (application/msword)DOC (application/msword) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
Extrahieren von Text, z. B. eingebettete DokumenteExtract text, including embedded documents
XLSX (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)XLSX (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
Extrahieren von Text, z. B. eingebettete DokumenteExtract text, including embedded documents
XLS (application/vnd.ms-excel)XLS (application/vnd.ms-excel) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
Extrahieren von Text, z. B. eingebettete DokumenteExtract text, including embedded documents
PPTX (application/vnd.openxmlformats-officedocument.presentationml.presentation)PPTX (application/vnd.openxmlformats-officedocument.presentationml.presentation) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
metadata_slide_count
metadata_title
Extrahieren von Text, z. B. eingebettete DokumenteExtract text, including embedded documents
PPT (application/vnd.ms-powerpoint)PPT (application/vnd.ms-powerpoint) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
metadata_slide_count
metadata_title
Extrahieren von Text, z. B. eingebettete DokumenteExtract text, including embedded documents
MSG (application/vnd.ms-outlook)MSG (application/vnd.ms-outlook) metadata_content_type
metadata_message_from
metadata_message_to
metadata_message_cc
metadata_message_bcc
metadata_creation_date
metadata_last_modified
metadata_subject
Extrahieren von Text, einschließlich AnlagenExtract text, including attachments
ZIP (application/zip)ZIP (application/zip) metadata_content_type Extrahieren von Text aus allen Dokumenten im ArchivExtract text from all documents in the archive
XML (application/xml)XML (application/xml) metadata_content_type
metadata_content_encoding
Entfernen von XML-Markup und Extrahieren von TextStrip XML markup and extract text
JSON (application/json)JSON (application/json) metadata_content_type
metadata_content_encoding
Extrahieren von TextExtract text
HINWEIS: Wenn Sie mehrere Felder des Dokuments aus einem JSON-Blob extrahieren möchten, helfen Ihnen die ausführlichen Informationen unter Indizierung der JSON-Blobs weiter.NOTE: If you need to extract multiple document fields from a JSON blob, see Indexing JSON blobs for details
EML (message/rfc822)EML (message/rfc822) metadata_content_type
metadata_message_from
metadata_message_to
metadata_message_cc
metadata_creation_date
metadata_subject
Extrahieren von Text, einschließlich AnlagenExtract text, including attachments
RTF (application/rtf)RTF (application/rtf) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_page_count
metadata_word_count
Extrahieren von TextExtract text
Nur-Text (text/plain)Plain text (text/plain) metadata_content_type
metadata_content_encoding
Extrahieren von TextExtract text

Helfen Sie uns bei der Verbesserung von Azure SearchHelp us make Azure Search better

Teilen Sie uns auf unserer UserVoice-Website mit, wenn Sie sich Features wünschen oder Verbesserungsvorschläge haben.If you have feature requests or ideas for improvements, let us know on our UserVoice site.