Indizieren von JSON-Blobs mit dem Azure Search-BlobindexerHow to index JSON blobs using Azure Search Blob indexer

In diesem Artikel wird beschrieben, wie Sie einen Azure Search-Blobindexer konfigurieren, um strukturierten Inhalt aus JSON-Dokumenten in Azure Blob Storage zu extrahieren und so vorzubereiten, dass er ihn Azure Search durchsucht werden kann.This article shows you how to configure an Azure Search blob indexer to extract structured content from JSON documents in Azure Blob storage and make it searchable in Azure Search. Dieser Workflow erstellt einen Azure Search-Index und lädt ihn mit vorhandenem, aus JSON-Blobs extrahiertem Text.This workflow creates an Azure Search index and loads it with existing text extracted from JSON blobs.

Sie können das Portal, REST-APIs oder das .NET SDK verwenden, um JSON-Inhalt zu indizieren.You can use the portal, REST APIs, or .NET SDK to index JSON content. JSON-Dokumente befinden sich grundsätzlich in einem Blobcontainer eines Azure Storage-Kontos.Common to all approaches is that JSON documents are located in a blob container in an Azure Storage account. Anleitungen zum Übertragen von JSON-Dokumenten mithilfe von Push von anderen Nicht-Azure-Plattformen finden Sie unter Indizieren externer Daten für Abfragen in Azure Search.For guidance on pushing JSON documents from other non-Azure platforms, see Data import in Azure Search.

JSON-Blobs in Azure Blob Storage bestehen normalerweise entweder aus einem einzelnen JSON-Dokument oder einer Sammlung von JSON-Entitäten.JSON blobs in Azure Blob storage are typically either a single JSON document or a collection of JSON entities. Für JSON-Sammlungen könnte das Blob möglicherweise ein Array wohlgeformter JSON-Elemente enthalten.For JSON collections, the blob could have an array of well-formed JSON elements. Blobs könnten auch aus mehreren einzelnen JSON-Entitäten zusammengesetzt sein, die durch einen Zeilenvorschub getrennt werden.Blobs could also be composed of multiple individual JSON entities separated by a newline. Mit dem Blobindexer in Azure Search können beide Fälle analysiert werden. Dies richtet sich danach, wie Sie den Parameter parsingMode in der Anforderung festlegen.The blob indexer in Azure Search can parse any such construction, depending on how you set the parsingMode parameter on the request.

Alle JSON-Analysemodi (json, jsonArray, jsonLines) sind jetzt allgemein verfügbar.All JSON parsing modes (json, jsonArray, jsonLines) are now generally available.

Hinweis

Befolgen Sie die Empfehlungen zur Indexerkonfiguration in 1:n-Indizierung, um mehrere Suchdokumente aus einem Azure-Blob auszugegeben.Follow the indexer configuration recommendations in One-to-many indexing to output multiple search documents from one Azure blob.

Verwenden des PortalsUse the portal

Die einfachste Methode zum Indizieren von JSON-Dokumenten ist die Verwendung eines Assistenten im Azure-Portal.The easiest method for indexing JSON documents is to use a wizard in the Azure portal. Der Datenimport-Assistent kann durch das Analysieren von Metadaten im Azure-Blobcontainer einen Standardindex erstellen, Quellfelder Zielindexfeldern zuordnen und den Index in einem einzigen Vorgang laden.By parsing metadata in the Azure blob container, the Import data wizard can create a default index, map source fields to target index fields, and load the index in a single operation. Je nach Größe und Komplexität der Quelldaten können Sie auch innerhalb von Minuten einen funktionsfähigen Volltextsuchindex erstellen.Depending on the size and complexity of source data, you could have an operational full text search index in minutes.

Sie sollten für Azure Search und Azure Storage dasselbe Azure-Abonnement verwenden, vorzugsweise in derselben Region.We recommend using the same Azure subscription for both Azure Search and Azure storage, preferably in the same region.

1. Vorbereiten von Quelldaten1 - Prepare source data

  1. Melden Sie sich beim Azure-Portal an.Sign in to the Azure portal.

  2. Erstellen Sie einen Blobcontainer für Ihre Daten.Create a Blob container to contain your data. Die öffentliche Zugriffsebene kann auf jeden der gültigen Werte festgelegt werden.The Public Access Level can be set to any of its valid values.

Sie benötigen den Namen des Speicherkontos, den Containernamen und einen Zugriffsschlüssel zum Abrufen Ihrer Daten im Datenimport-Assistenten.You will need the storage account name, container name, and an access key to retrieve your data in the Import data wizard.

2. Starten des Datenimport-Assistenten2 - Start Import data wizard

Auf der Seite „Übersicht“ Ihres Azure Search-Diensts können Sie den Assistenten über die Befehlsleiste starten. Alternativ können Sie im Abschnitt Blob-Dienst, der sich im linken Navigationsbereich Ihres Speicherkontos befindet, auf Azure Search hinzufügen klicken.In the Overview page of your Azure Search service, you can start the wizard from the command bar, or by clicking Add Azure Search in the Blob service section of your storage account's left navigation pane.

Befehl „Daten importieren“ im PortalImport data command in portal

3. Einrichten der Datenquelle3 - Set the data source

Auf der Seite Datenquelle muss die Quelle Azure Blob Storage lauten und folgende Spezifikationen aufweisen:In the data source page, the source must be Azure Blob Storage, with the following specifications:

  • Zu extrahierende Daten muss Inhalt und Metadaten sein.Data to extract should be Content and metadata. Durch die Auswahl dieser Option kann der Assistent ein Indexschema ableiten und so die Felder für den Importvorgang zuordnen.Choosing this option allows the wizard to infer an index schema and map the fields for import.

  • Analysemodus muss auf JSON, JSON-Array oder JSON-Zeilen festgelegt sein.Parsing mode should be set to JSON, JSON array or JSON lines.

    JSON definiert jedes Blob als einzelnes Suchdokument, das als unabhängiges Element in Suchergebnissen angezeigt wird.JSON articulates each blob as a single search document, showing up as an independent item in search results.

    JSON-Array ist für Blobs, die wohlgeformte JSON-Daten enthalten – die wohlgeformten JSON-Daten entsprechen einem Array von Objekten, oder verfügen über eine Eigenschaft, die ein Array von Objekten ist, und jedes Element soll als eigenständiges, unabhängiges Suchdokument dargestellt werden.JSON array is for blobs that contain well-formed JSON data - the well-formed JSON corresponds to an array of objects, or has a property which is an array of objects and you want each element to be articulated as a standalone, independent search document. Wenn Blobs komplex sind und Sie JSON-Array nicht auswählen, dann wird das gesamte Blob als einzelnes Dokument erfasst.If blobs are complex, and you don't choose JSON array the entire blob is ingested as a single document.

    JSON-Zeilen ist für Blobs, die aus mehreren durch einen Zeilenvorschub getrennte JSON-Entitäten bestehen, wobei jede Entität als eigenständiges unabhängiges Suchdokument angesehen werden soll.JSON lines is for blobs composed of multiple JSON entities separated by a new-line, where you want each entity to be articulated as a standalone independent search document. Wenn Blobs komplex sind und Sie den Analysemodus JSON-Zeilen nicht auswählen, dann wird das gesamte Blob als einzelnes Dokument erfasst.If blobs are complex, and you don't choose JSON lines parsing mode, then the entire blob is ingested as a single document.

  • Speichercontainer muss Ihr Speicherkonto sowie den Container angeben oder alternativ eine Verbindungszeichenfolge, die im Container aufgelöst wird.Storage container must specify your storage account and container, or a connection string that resolves to the container. Sie können Verbindungszeichenfolgen auf der Seite des Blob-Dienst-Portals abrufen.You can get connection strings on the Blob service portal page.

    Definition der Blobdatenquelle

4. Überspringen der Seite „Kognitive Suche hinzufügen“ im Assistenten4 - Skip the "Add cognitive search" page in the wizard

Das Hinzufügen kognitiver Qualifikationen ist für den Import eines JSON-Dokuments nicht erforderlich.Adding cognitive skills is not necessary for JSON document import. Wenn Sie nicht unbedingt Cognitive Services-APIs und Transformationen zu Ihrer Indizierungspipeline hinzufügen müssen, können Sie diesen Schritt überspringen.Unless you have a specific need to include Cognitive Services APIs and transformations to your indexing pipeline, you should skip this step.

Um den Schritt zu überspringen, wechseln Sie zunächst zur nächsten Seite.To skip the step, first go to the next page.

Nächste Seite, Schaltfläche für kognitive Suche

Von dieser Seite aus können Sie zur Indexanpassung springen.From that page you can skip ahead to index customization.

Überspringen des Schritts zu kognitiven Qualifikationen

5. Festlegen von Indexattributen5 - Set index attributes

Auf der Indexseite sollte eine Liste von Feldern mit einem Datentyp sowie mehrere Kontrollkästchen zum Festlegen von Indexattributen aufgeführt sein.In the Index page, you should see a list of fields with a data type and a series of checkboxes for setting index attributes. Der Assistent kann basierend auf Metadaten und durch Sampling der Quelldaten eine Felderliste erstellen.The wizard can generate a fields list based on metadata and by sampling the source data.

Sie können durch Klicken auf das Kontrollkästchen am Kopf einer Attributspalte mehrere Attribute gleichzeitig auswählen.You can bulk-select attributes by clicking the checkbox at the top of an attribute column. Wählen Sie Abrufbar und Durchsuchbar für jedes Feld aus, das an eine Client-App zurückgegeben werden sollte und der Volltextsuche unterliegt.Choose Retrievable and Searchable for every field that should be returned to a client app and subject to full text search processing. Sie werden feststellen, dass Ganzzahlen nicht mit der Volltext- oder Fuzzysuche durchsuchbar sind (Zahlen werden wörtlich ausgewertet und eignen sich häufig in Filtern).You'll notice that integers are not full text or fuzzy searchable (numbers are evaluated verbatim and are often useful in filters).

Weitere Informationen finden Sie in den Beschreibungen der Indexattribute und Sprachanalysetools.Review the description of index attributes and language analyzers for more information.

Nehmen Sie sich einen Moment Zeit, um Ihre Auswahl zu überprüfen.Take a moment to review your selections. Wenn Sie den Assistenten ausführen, werden physische Datenstrukturen erstellt, und Sie können diese Felder nicht bearbeiten, ohne alle Objekte zu löschen und neu zu erstellen.Once you run the wizard, physical data structures are created and you won't be able to edit these fields without dropping and recreating all objects.

Blobindexdefinition

6: Erstellen des Indexers6 - Create indexer

Wenn alle Angaben gemacht wurden, erstellt der Assistent drei unterschiedliche Objekte in Ihrem Suchdienst.Fully specified, the wizard creates three distinct objects in your search service. Ein Datenquellenobjekt und ein Indexobjekt werden als benannte Ressourcen in Ihrem Azure Search-Dienst gespeichert.A data source object and index object are saved as named resources in your Azure Search service. Mit dem letzten Schritt wird ein Indexerobjekt erstellt.The last step creates an indexer object. Wenn der Indexer benannt wird, kann er als eigenständige Ressource existieren. Diese können Sie unabhängig vom Index und Datenquellenobjekt, die im selben Durchlauf des Assistenten erstellt wurden, planen und verwalten.Naming the indexer allows it to exist as a standalone resource, which you can schedule and manage independently of the index and data source object, created in the same wizard sequence.

Falls Sie noch nicht mit Indexern vertraut sind: Ein Indexer ist eine Ressource in Azure Search, die eine externe Datenquelle nach durchsuchbarem Inhalt durchforstet.If you are not familiar with indexers, an indexer is a resource in Azure Search that crawls an external data source for searchable content. Die Ausgabe des Datenimport-Assistenten ist ein Indexer, der Ihre JSON-Datenquelle durchforstet, durchsuchbaren Inhalt extrahiert und diesen in einen Index im Azure Search-Dienst importiert.The output of the Import data wizard is an indexer that crawls your JSON data source, extracts searchable content, and imports it into an index on Azure Search.

Definition des Blobindexers

Klicken Sie auf OK, um den Assistenten auszuführen und alle Objekte zu erstellen.Click OK to run the wizard and create all objects. Die Indizierung wird sofort durchgeführt.Indexing commences immediately.

Sie können den Datenimport auf den Portalseiten überwachen.You can monitor data import in the portal pages. Fortschrittsbenachrichtigungen geben den Indizierungsstatus an und wie viele Dokumente hochgeladen werden.Progress notifications indicate indexing status and how many documents are uploaded.

Wenn die Indizierung abgeschlossen ist, können Sie den Such-Explorer zum Abfragen Ihres Indexes verwenden.When indexing is complete, you can use Search explorer to query your index.

Hinweis

Wenn nicht die Daten angezeigt werden, die Sie erwarten, müssen Sie vielleicht weitere Attribute für weitere Felder festlegen.If you don't see the data you expect, you might need to set more attributes on more fields. Löschen Sie den Index und Indexer, die Sie gerade erstellt haben, und führen Sie die Schritte des Assistenten erneut aus, wobei Sie Ihre Auswahl für Indexattribute in Schritt 5 ändern.Delete the index and indexer you just created, and step through the wizard again, modifying your selections for index attributes in step 5.

Verwenden von REST-APIsUse REST APIs

Sie können die REST-API für die Indizierung von JSON-Blobs in einem dreiteiligen Workflow verwenden, der für alle Indexer in Azure Search gleich ist: Erstellen einer Datenquelle, eines Indexes und eines Indexers.You can use the REST API to index JSON blobs, following a three-part workflow common to all indexers in Azure Search: create a data source, create an index, create an indexer. Das Extrahieren von Daten aus Blobspeicher wird durchgeführt, wenn Sie die Anforderung „Indexer erstellen“ senden.Data extraction from blob storage occurs when you submit the Create Indexer request. Nachdem diese Anforderung abgeschlossen ist, verfügen Sie über einen Index, der abgefragt werden kann.After this request is finished, you will have a queryable index.

Sie können den REST-Beispielcode am Ende dieses Abschnitts überprüfen, der zeigt, wie alle drei Objekte erstellt werden.You can review REST example code at the end of this section that shows how to create all three objects. Dieser Abschnitt enthält auch Informationen über JSON-Analysemodi, einzelne Blobs, JSON-Arrays und geschachtelte Arrays.This section also contains details about JSON parsing modes, single blobs, JSON arrays, and nested arrays.

Verwenden Sie für die Indizierung von JSON-Code auch Postman und die REST-API, um diese Objekte zu erstellen:For code-based JSON indexing, use Postman and the REST API to create these objects:

Die Reihenfolge der Vorgänge erfordert, dass Sie Objekte in der angegebenen Reihenfolge erstellen und aufrufen.Order of operations requires that you create and call objects in this order. Im Gegensatz zum Portalworkflow erfordert ein Codeansatz einen verfügbaren Index, um die JSON-Dokumente zu akzeptieren, die über die Indexer erstellen-Anforderung gesendet werden.In contrast with the portal workflow, a code approach requires an available index to accept the JSON documents sent through the Create Indexer request.

JSON-Blobs in Azure Blob Storage bestehen normalerweise entweder aus einem einzelnen JSON-Dokument oder einem JSON-„Array“.JSON blobs in Azure Blob storage are typically either a single JSON document or a JSON "array". Mit dem Blobindexer in Azure Search können beide Fälle analysiert werden. Dies richtet sich danach, wie Sie den Parameter parsingMode in der Anforderung festlegen.The blob indexer in Azure Search can parse either construction, depending on how you set the parsingMode parameter on the request.

JSON-DokumentJSON document parsingModeparsingMode BESCHREIBUNGDescription VerfügbarkeitAvailability
Ein Dokument pro BlobOne per blob json JSON-Blobs werden als einzelne Textblöcke analysiert.Parses JSON blobs as a single chunk of text. Jedes JSON-Blob wird zu einem einzelnen Azure Search-Dokument.Each JSON blob becomes a single Azure Search document. Allgemein sowohl in REST-API als auch .NET SDK verfügbar.Generally available in both REST API and .NET SDK.
Mehrere Dokumente pro BlobMultiple per blob jsonArray Analysiert ein JSON-Array im Blob, und jedes Element des Arrays wird zu einem separaten Azure Search-Dokument.Parses a JSON array in the blob, where each element of the array becomes a separate Azure Search document. Allgemein sowohl in REST-API als auch .NET SDK verfügbar.Generally available in both REST API and .NET SDK.
Mehrere Dokumente pro BlobMultiple per blob jsonLines Analysiert ein Blob, das mehrere durch einen Zeilenvorschub getrennte JSON-Entitäten (ein „Array“) enthält, wobei jede Entität ein separates Azure Search-Dokument wird.Parses a blob which contains multiple JSON entities (an "array") separated by a newline, where each entity becomes a separate Azure Search document. Allgemein sowohl in REST-API als auch .NET SDK verfügbar.Generally available in both REST API and .NET SDK.

1 – Zusammenstellen der Eingaben für die Anforderung1 - Assemble inputs for the request

Für jede Anforderung müssen Sie den Dienstnamen und den Administratorschlüssel für Azure Search (im POST-Header) und den Namen des Speicherkontos sowie den Schlüssel für den Blobspeicher bereitstellen.For each request, you must provide the service name and admin key for Azure Search (in the POST header), and the storage account name and key for blob storage. Sie können Postman zum Senden von HTTP-Anforderungen an Azure Search verwenden.You can use Postman to send HTTP requests to Azure Search.

Kopieren Sie die folgenden vier Werten in den Editor, sodass Sie sie in eine Anforderung einfügen können:Copy the following four values into Notepad so that you can paste them into a request:

  • Azure Search-DienstnameAzure Search service name
  • Azure Search-AdministratorschlüsselAzure Search admin key
  • Azure-SpeicherkontonameAzure storage account name
  • Azure-SpeicherkontoschlüsselAzure storage account key

Sie finden diese Werte im Portal:You can find these values in the portal:

  1. Kopieren Sie in den Portalseiten für Azure Search die Suchdienst-URL aus der Seite „Übersicht“.In the portal pages for Azure Search, copy the search service URL from the Overview page.

  2. Klicken Sie im linken Navigationsbereich auf Schlüssel, und kopieren Sie dann entweder den primären oder sekundären Schlüssel (sie sind identisch).In the left navigation pane, click Keys and then copy either the primary or secondary key (they are equivalent).

  3. Wechseln Sie zu den Portalseiten für Ihr Speicherkonto.Switch to the portal pages for your storage account. Klicken Sie im linken Navigationsbereich unter Einstellungen auf die Option Zugriffsschlüssel.In the left navigation pane, under Settings, click Access Keys. Diese Seite enthält sowohl den Kontonamen als auch den Schlüssel.This page provides both the account name and key. Kopieren Sie den Namen des Speicherkontos und einen der Schlüssel in den Editor.Copy the storage account name and one of the keys to Notepad.

2 – Erstellen einer Datenquelle2 - Create a data source

Dieser Schritt umfasst die Bereitstellung der Datenquellen-Verbindungsinformationen, die vom Indexer verwendet werden.This step provides data source connection information used by the indexer. Die Datenquelle ist ein benanntes Objekt in Azure Search, das die Verbindungsinformationen beibehält.The data source is a named object in Azure Search that persists the connection information. Mit dem Datenquellentyp, azureblob, wird bestimmt, welches Datenextraktionsverhalten vom Indexer aufgerufen wird.The data source type, azureblob, determines which data extraction behaviors are invoked by the indexer.

Geben Sie gültige Werte für die Platzhalter von Dienstnamen, Administratorschlüssel, Speicherkonto und Kontoschlüssel an.Substitute valid values for service name, admin key, storage account, and account key placeholders.

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

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

3 – Erstellen eines Zielsuchindexes3 - Create a target search index

Indexer sind mit einem Indexschema gekoppelt.Indexers are paired with an index schema. Bereiten Sie bei Verwendung der API (anstelle des Portals) vorher einen Index vor, damit Sie ihn für den Indexervorgang angeben können.If you are using the API (rather than the portal), prepare an index in advance so that you can specify it on the indexer operation.

Der Index speichert durchsuchbaren Inhalt in Azure Search.The index stores searchable content in Azure Search. Stellen Sie ein Schema bereit, mit dem die Felder in einem Dokument, Attribute und andere Konstrukte für die Suchoberfläche angegeben werden, um einen Index zu erstellen.To create an index, provide a schema that specifies the fields in a document, attributes, and other constructs that shape the search experience. Wenn Sie einen Index erstellen, der über dieselben Feldnamen und Datentypen wie die Quelle verfügt, entspricht der Indexer der Quelle und den Zielfeldern. Dadurch wird Ihnen die Arbeit erspart, die Felder explizit zuordnen zu müssen.If you create an index that has the same field names and data types as the source, the indexer will match the source and destination fields, saving you the work of having to explicitly map the fields.

Im Anschluss sehen Sie ein Beispiel für die Anforderung Index erstellen.The following example shows a Create Index request. Der Index verfügt über ein durchsuchbares content-Feld, in dem der aus den Blobs extrahierten Text gespeichert wird:The index will have 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 for Azure Search]

{
      "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 }
      ]
}

4 – Konfigurieren und Ausführen des Indexers4 - Configure and run the indexer

Wie bei einem Index und einer Datenquelle handelt es sich auch beim Indexer um ein benanntes Objekt, das Sie erstellen und in einem Azure Search-Dienst wiederverwenden.As with an index and a data source, and indexer is also a named object that you create and reuse on an Azure Search service. Eine vollständige Anforderung zum Erstellen eines Indexers kann beispielsweise wie folgt aussehen:A fully specified request to create an indexer might look as follows:

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

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

Die Indexerkonfiguration befindet sich im Text der Anforderung.Indexer configuration is in the body of the request. Sie erfordert eine Datenquelle und einen leeren Zielindex, der bereits in Azure Search vorhanden ist.It requires a data source and an empty target index that already exists in Azure Search.

Zeitplan und Parameter sind optional.Schedule and parameters are optional. Wenn Sie diese Angaben weglassen, wird der Indexer sofort ausgeführt, indem json als Analysemodus verwendet wird.If you omit them, the indexer runs immediately, using json as the parsing mode.

Dieser bestimmte Indexer enthält keine Feldzuordnungen.This particular indexer does not include field mappings. Innerhalb der Indexerdefinition können Sie Feldzuordnungen weglassen, wenn die Eigenschaften des JSON-Quelldokuments mit den Feldern Ihres Zielsuchindexes übereinstimmen.Within the indexer definition, you can leave out field mappings if the properties of the source JSON document match the fields of your target search index.

Beispiel für RESTREST Example

Dieser Abschnitt enthält eine Zusammenfassung aller Anforderungen, die zum Erstellen von Objekten verwendet werden.This section is a recap of all the requests used for creating objects. Eine Erläuterung der Komponententeile finden Sie in den vorherigen Abschnitten dieses Artikels.For a discussion of component parts, see the previous sections in this article.

Anforderung der DatenquelleData source request

Alle Indexer erfordern ein Datenquellenobjekt, das Informationen zur Verbindung mit vorhandenen Daten bereitstellt.All indexers require a data source object that provides connection information to existing data.

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

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

IndexanforderungIndex request

Alle Indexer erfordern einen Zielindex, der die Daten empfängt.All indexers require a target index that receives the data. Der Text der Anforderung definiert das aus Feldern bestehende Indexschema, das das gewünschte Verhalten in einem durchsuchbaren Index unterstützen soll.The body of the request defines the index schema, consisting of fields, attributed to support the desired behaviors in a searchable index. Dieser Index sollte leer sein, wenn Sie den Indexer ausführen.This index should be empty when you run the indexer.

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

{
      "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 }
      ]
}

IndexeranforderungIndexer request

Diese Anforderung zeigt einen vollständig angegebenen Indexer.This request shows a fully-specified indexer. Er enthält Feldzuordnungen, die in den vorherigen Beispielen ausgelassen wurden.It includes field mappings, which were omitted in previous examples. Denken Sie daran, dass „schedule“, „parameter“ und „fieldMappings“ optional sind, solange ein Standard verfügbar ist.Recall that "schedule", "parameters", and "fieldMappings" are optional as long as there is an available default. Das Weglassen von „schedule“ bewirkt, dass der Indexer sofort ausgeführt wird.Omitting "schedule" causes the indexer to run immediately. Das Weglassen von „parsingMode“ bewirkt, dass der Index die Standardeinstellung „json“ verwendet.Omitting "parsingMode" causes the index to use the "json" default.

Das Erstellen des Indexers in Azure Search löst einen Datenimport aus.Creating the indexer on Azure Search triggers data import. Er wird sofort ausgeführt, und anschließend nach einem Zeitplan, wenn Sie einen angegeben haben.It runs immediately, and thereafter on a schedule if you've provided one.

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

{
  "name" : "my-json-indexer",
  "dataSourceName" : "my-blob-datasource",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" },
  "parameters" : { "configuration" : { "parsingMode" : "json" } },
  "fieldMappings" : [
    { "sourceFieldName" : "/article/text", "targetFieldName" : "text" },
    { "sourceFieldName" : "/article/datePublished", "targetFieldName" : "date" },
    { "sourceFieldName" : "/article/tags", "targetFieldName" : "tags" }
    ]
}

Verwenden von .NET SDKUse .NET SDK

Das .NET SDK ist der REST-API vollständig gleichgestellt.The .NET SDK has full parity with the REST API. Es wird empfohlen, dass Sie den vorherige Abschnitt zur REST-API genau lesen, um die Konzepte, den Workflow und die Anforderungen zu verstehen.We recommend that you review the previous REST API section to learn concepts, workflow, and requirements. Sie können sich anschließend auf die folgende .NET-API-Referenzdokumentation beziehen, um einen JSON-Indexer in verwalteten Code zu implementieren.You can then refer to following .NET API reference documentation to implement a JSON indexer in managed code.

AnalysemodiParsing modes

JSON-Blobs können mehrere Formulare annehmen.JSON blobs can assume multiple forms. Der parsingMode-Parameter im JSON-Indexer bestimmt, wie JSON-Blobinhalt in einem Azure Search-Index analysiert und strukturiert wird:The parsingMode parameter on the JSON indexer determines how JSON blob content is parsed and structured in an Azure Search index:

parsingModeparsingMode BESCHREIBUNGDescription
json Indizieren Sie jedes Blob als einzelnes Dokument.Index each blob as a single document. Dies ist die Standardoption.This is the default.
jsonArray Wählen Sie diesen Modus aus, wenn Ihre Blobs aus JSON-Arrays bestehen und Sie möchten, dass jedes Element des Arrays in Azure Search zu einem einzelnen Dokument wird.Choose this mode if your blobs consist of JSON arrays, and you need each element of the array to become a separate document in Azure Search.
jsonLines Wählen Sie diesen Modus aus, wenn Ihre Blobs aus mehreren durch einen Zeilenvorschub getrennte JSON-Entitäten bestehen, und jede Entität in Azure Search zu einem separaten Dokument werden muss.Choose this mode if your blobs consist of multiple JSON entities, that are separated by a new line, and you need each entity to become a separate document in Azure Search.

Sie können sich ein Dokument als einzelnes Element in Suchergebnissen vorstellen.You can think of a document as a single item in search results. Wenn Sie möchten, dass jedes Element im Array in den Suchergebnissen als unabhängiges Element angezeigt wird, verwenden Sie entsprechend die jsonArray- oder jsonLines-Option.If you want each element in the array to show up in search results as an independent item, then use the jsonArray or jsonLines option as appropriate.

Innerhalb der Indexerdefinition können Sie optional Feldzuordnungen verwenden, um auszuwählen, welche Eigenschaften des JSON-Quelldokuments zum Auffüllen Ihres Zielsuchindex verwendet werden sollen.Within the indexer definition, you can optionally use field mappings to choose which properties of the source JSON document are used to populate your target search index. Für den jsonArray-Analysemodus gilt Folgendes: Wenn das Array als Eigenschaft auf niedrigerer Ebene vorhanden ist, können Sie einen Dokumentstamm festlegen, mit dem angegeben wird, wo das Array im Blob angeordnet ist.For jsonArray parsing mode, if the array exists as a lower-level property, you can set a document root indicating where the array is placed within the blob.

Wichtig

Bei Verwendung des json-, jsonArray- oder jsonLines-Analysemodus geht Azure Search davon aus, dass alle Blobs in Ihrer Datenquelle JSON enthalten.When you use json, jsonArray or jsonLines parsing mode, Azure Search assumes that all blobs in your data source contain JSON. Wenn Sie eine Kombination von JSON- und Nicht-JSON-Blobs in der gleichen Datenquelle unterstützen müssen, informieren Sie uns auf unserer UserVoice-Website.If you need to support a mix of JSON and non-JSON blobs in the same data source, let us know on our UserVoice site.

Analysieren von einzelnen JSON-BlobsParse single JSON blobs

In der Standardeinstellung analysiert der Azure Search-Blob-Indexer JSON-Blobs als einen einzelnen Textblock.By default, Azure Search blob indexer parses JSON blobs as a single chunk of text. Häufig möchten Sie die Struktur Ihrer JSON-Dokumente beibehalten.Often, you want to preserve the structure of your JSON documents. Angenommen, Sie verwenden in Azure Blob Storage das folgende JSON-Dokument:For example, assume you have the following JSON document in Azure Blob storage:

{
    "article" : {
        "text" : "A hopefully useful article explaining how to parse JSON blobs",
        "datePublished" : "2016-04-13",
        "tags" : [ "search", "storage", "howto" ]    
    }
}

Der Blobindexer löst das JSON-Dokument in ein einzelnes Azure Search-Dokument auf.The blob indexer parses the JSON document into a single Azure Search document. Der Indexer lädt einen Index, indem die Elemente „text“, „datePublished“ und „tags“ aus der Quelle mit Zielindexfeldern abgeglichen werden, die den gleichen Namen und Typ aufweisen.The indexer loads an index by matching "text", "datePublished", and "tags" from the source against identically named and typed target index fields.

Wie schon erwähnt, sind Feldzuordnungen nicht erforderlich.As noted, field mappings are not required. Bei einem Index mit den Feldern „text“, „datePublished“ und „tags“ kann der Blobindexer die richtige Zuordnung ableiten, ohne dass in der Anforderung eine Feldzuordnung enthalten ist.Given an index with "text", "datePublished, and "tags" fields, the blob indexer can infer the correct mapping without a field mapping present in the request.

Analysieren von JSON-ArraysParse JSON arrays

Alternativ können Sie auch die JSON-Arrayoption verwenden.Alternatively, you can use the JSON array option. Diese Option ist nützlich, wenn Blobs ein Array mit wohlgeformten JSON-Objekten enthalten und jedes Element zu einem separaten Azure Search-Dokument werden soll.This option is useful when blobs contain an array of well-formed JSON objects, and you want each element to become a separate Azure Search document. Wenn beispielsweise das folgende JSON-Blob vorhanden ist, können Sie Ihren Azure Search-Index mit drei separaten Dokumenten auffüllen, die jeweils die Felder „id“ und „text“ aufweisen.For example, given the following JSON blob, you can populate your Azure Search index with three separate documents, each with "id" and "text" fields.

[
    { "id" : "1", "text" : "example 1" },
    { "id" : "2", "text" : "example 2" },
    { "id" : "3", "text" : "example 3" }
]

Für ein JSON-Array sollte die Indexerdefinition dem folgenden Beispiel ähneln.For a JSON array, the indexer definition should look similar to the following example. Beachten Sie, dass der parsingMode-Parameter den jsonArray-Parser angibt.Notice that the parsingMode parameter specifies the jsonArray parser. Die einzigen beiden arrayspezifischen Anforderungen zum Indizieren von JSON-Blobs sind die Angabe des richtigen Parsers und die Eingabe der richtigen Daten.Specifying the right parser and having the right data input are the only two array-specific requirements for indexing JSON blobs.

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

{
  "name" : "my-json-indexer",
  "dataSourceName" : "my-blob-datasource",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" },
  "parameters" : { "configuration" : { "parsingMode" : "jsonArray" } }
}

Beachten Sie auch hierbei wieder, dass die Feldzuordnungen ausgelassen werden können.Again, notice that field mappings can be omitted. Angenommen, Sie verfügen über einen Index mit den gleichnamigen Feldern „id“ und „text“, dann kann der Blobindexer die richtige Zuordnung ohne explizite Feldzuordnungsliste ableiten.Assuming an index with identically named "id" and "text" fields, the blob indexer can infer the correct mapping without an explicit field mapping list.

Analysieren geschachtelter ArraysParse nested arrays

Damit JSON-Arrays geschachtelte Elemente enthalten, können Sie eine documentRoot angeben, um eine Struktur mit mehreren Ebenen anzugeben.For JSON arrays having nested elements, you can specify a documentRoot to indicate a multi-level structure. Angenommen, Ihre Blobs sehen folgendermaßen aus:For example, if your blobs look like this:

{
    "level1" : {
        "level2" : [
            { "id" : "1", "text" : "Use the documentRoot property" },
            { "id" : "2", "text" : "to pluck the array you want to index" },
            { "id" : "3", "text" : "even if it's nested inside the document" }  
        ]
    }
}

Verwenden Sie diese Konfiguration, um das in der level2-Eigenschaft enthaltene Array zu indizieren:Use this configuration to index the array contained in the level2 property:

{
    "name" : "my-json-array-indexer",
    ... other indexer properties
    "parameters" : { "configuration" : { "parsingMode" : "jsonArray", "documentRoot" : "/level1/level2" } }
}

Analysieren von Blobs, die durch einen Zeilenvorschub getrennt sindParse blobs separated by newlines

Wenn das Blob mehrere JSON-Entitäten enthält, die durch einen Zeilenvorschub getrennt sind, und jedes Element ein separates Azure Search-Dokument werden soll, können Sie die JSON-Zeilen-Option auswählen.If your blob contains multiple JSON entities separated by a newline, and you want each element to become a separate Azure Search document, you can opt for the JSON lines option. Beispielsweise können Sie bei dem folgenden Blob (in dem drei verschiedene JSON-Entitäten vorliegen) Ihren Azure Search-Index mit drei separaten Dokumenten auffüllen, die jeweils die Felder „id“ und „text“ aufweisen.For example, given the following blob (where there are three different JSON entities), you can populate your Azure Search index with three separate documents, each with "id" and "text" fields.

{ "id" : "1", "text" : "example 1" }
{ "id" : "2", "text" : "example 2" }
{ "id" : "3", "text" : "example 3" }

Für JSON-Zeilen sollte die Indexerdefinition dem folgenden Beispiel ähneln.For JSON lines, the indexer definition should look similar to the following example. Beachten Sie, dass der parsingMode-Parameter den jsonLines-Parser angibt.Notice that the parsingMode parameter specifies the jsonLines parser.

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

{
  "name" : "my-json-indexer",
  "dataSourceName" : "my-blob-datasource",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" },
  "parameters" : { "configuration" : { "parsingMode" : "jsonLines" } }
}

Beachten Sie auch hierbei wieder, dass die Feldzuordnungen ähnlich wie beim jsonArray-Analysemodus ausgelassen werden können.Again, notice that field mappings can be omitted, similar to the jsonArray parsing mode.

Hinzufügen von FeldzuordnungenAdd field mappings

Wenn Quell- und Zielfelder nicht genau aneinander ausgerichtet sind, können Sie im Anforderungstext einen Abschnitt für die Feldzuordnung definieren, um explizite Feld-zu-Feld-Zuordnungen zu ermöglichen.When source and target fields are not perfectly aligned, you can define a field mapping section in the request body for explicit field-to-field associations.

Derzeit kann Azure Search JSON-Dokumente nicht willkürlich direkt indizieren, da nur primitive Datentypen, Zeichenfolgenarrays und GeoJSON-Punkte unterstützt werden.Currently, Azure Search cannot index arbitrary JSON documents directly because it supports only primitive data types, string arrays, and GeoJSON points. Sie können jedoch mit Feldzuordnungen Teile des JSON-Dokuments auswählen und diese in die Felder der obersten Ebene des Suchdokuments „heben“.However, you can use field mappings to pick parts of your JSON document and "lift" them into top-level fields of the search document. Informationen zu den Grundlagen von Feldzuordnungen finden Sie unter Feldzuordnungen in Azure Search-Indexern.To learn about field mappings basics, see Field mappings in Azure Search indexers.

Wir verwenden wieder unser JSON-Beispieldokument:Revisiting our example JSON document:

{
    "article" : {
        "text" : "A hopefully useful article explaining how to parse JSON blobs",
        "datePublished" : "2016-04-13"
        "tags" : [ "search", "storage", "howto" ]    
    }
}

Angenommen, Sie haben einen Suchindex mit den folgenden Feldern: text vom Typ Edm.String, date vom Typ Edm.DateTimeOffset und tags vom Typ Collection(Edm.String).Assume a search index with the following fields: text of type Edm.String, date of type Edm.DateTimeOffset, and tags of type Collection(Edm.String). Beachten Sie die Abweichung zwischen „datePublished“ in der Quelle und dem Feld date im Index.Notice the discrepancy between "datePublished" in the source and date field in the index. Um das JSON-Objekt in der gewünschten Form zuzuordnen, verwenden Sie die folgenden Feldzuordnungen:To map your JSON into the desired shape, use the following field mappings:

"fieldMappings" : [
    { "sourceFieldName" : "/article/text", "targetFieldName" : "text" },
    { "sourceFieldName" : "/article/datePublished", "targetFieldName" : "date" },
    { "sourceFieldName" : "/article/tags", "targetFieldName" : "tags" }
  ]

Die Quellenfeldnamen in den Zuordnungen werden mit der JSON-Zeiger -Notation angegeben.The source field names in the mappings are specified using the JSON Pointer notation. Sie beginnen mit einem Schrägstrich, um auf das Stammverzeichnis des JSON-Dokuments zu verweisen, und wählen dann mittels eines schrägstrichgetrennten Weiterleitungspfads den Pfad zur gewünschten Eigenschaft (auf beliebiger Schachtelungsebene) aus.You start with a forward slash to refer to the root of your JSON document, then pick the desired property (at arbitrary level of nesting) by using forward slash-separated path.

Sie können auch mit einem nullbasierten Index auf einzelne Arrayelemente verweisen.You can also refer to individual array elements by using a zero-based index. Um z. B. das erste Element des Arrays „tags“ aus dem obigen Beispiel auszuwählen, verwenden Sie eine Feldzuordnung wie folgt:For example, to pick the first element of the "tags" array from the above example, use a field mapping like this:

{ "sourceFieldName" : "/article/tags/0", "targetFieldName" : "firstTag" }

Hinweis

Wenn ein Quellfeldname in einer Feldzuordnung auf eine Eigenschaft verweist, die nicht in JSON vorhanden ist, wird die Zuordnung ohne Fehler übersprungen.If a source field name in a field mapping path refers to a property that doesn't exist in JSON, that mapping is skipped without an error. Dies geschieht, damit Dokumente mit einem anderen Schema unterstützt werden können (ein häufiger Anwendungsfall).This is done so that we can support documents with a different schema (which is a common use case). Da keine Überprüfung erfolgt, müssen Sie darauf achten, Tippfehler in Ihrer Feldzuordnungspezifikation zu vermeiden.Because there is no validation, you need to take care to avoid typos in your field mapping specification.

Weitere InformationenSee also