Einen Indexer in Azure AI Search erstellen

Verwenden Sie einen Indexer, um den Datenimport und die Indizierung in Azure AI Search zu automatisieren. Ein Indexer ist ein benanntes Objekt in einem Suchdienst, das eine Verbindung zu einer externen Azure-Datenquelle herstellt, Daten liest und sie zur Indizierung an eine Suchmaschine weitergibt. Die Verwendung von Indexern reduziert die Menge und Komplexität des Codes, den Sie schreiben müssen, erheblich, wenn Sie eine unterstützte Datenquelle verwenden.

Indexer unterstützen zwei Workflows:

  • Textbasierte Indizierung, Extraktion von Zeichenfolgen und Metadaten aus Textinhalten für Volltextsuch-Szenarien.

  • Skillbasierte Indizierung mithilfe integrierter oder benutzerdefinierter Skills, die integriertes maschinelles Lernen für die Analyse von Bildern und großen undifferenzierten Inhalten hinzufügen sowie Text und Struktur extrahieren oder ableiten. Die skillbasierte Indizierung ermöglicht die Suche in Inhalten, die sonst nicht leicht per Volltextsuche durchsuchbar sind. Weitere Informationen finden Sie unter AI-Anreicherung in Azure AI Search.

Dieser Artikel konzentriert sich auf die grundlegenden Schritte zur Erstellung eines Indexers. Abhängig von der Datenquelle und Ihrem Workflow sind möglicherweise weitere Konfigurationsschritte erforderlich.

Voraussetzungen

  • Eine unterstützte Datenquelle, die den Inhalt enthält, den Sie aufnehmen möchten.

  • Eine Indexer-Datenquelle, die eine Verbindung zu externen Daten herstellt.

  • Ein Suchindex, der eingehende Daten annehmen kann.

  • Überschreiten Sie nicht die maximalen Grenzwerte für Ihre Dienstebene. Die kostenlose Stufe erlaubt drei Objekte jedes Typs und 1-3 Minuten Indexer-Verarbeitung, oder 3-10, wenn ein Skillset vorhanden ist.

Indexer-Muster

Wenn Sie einen Indexer erstellen, gibt es zwei Definitionsmuster: textbasierte Indexierung oder KI-Anreicherung mit Fähigkeiten. Die Muster sind die gleichen, nur dass die kompetenzbasierte Indexierung mehr Definitionen hat.

Indexer-Beispiel für textbasierte Indizierung

Die textbasierte Indizierung für die Volltextsuche ist der primäre Anwendungsfall für Indexer, und für diesen Arbeitsablauf sieht ein Indexer wie dieses Beispiel aus.

{
  "name": (required) String that uniquely identifies the indexer,
  "description": (optional),
  "dataSourceName": (required) String indicating which existing data source to use,
  "targetIndexName": (required) String indicating which existing index to use,
  "parameters": {
    "batchSize": null,
    "maxFailedItems": 0,
    "maxFailedItemsPerBatch": 0,
    "base64EncodeKeys": false,
    "configuration": {}
  },
  "fieldMappings": (optional) unless field discrepancies need resolution,
  "disabled": null,
  "schedule": null,
  "encryptionKey": null
}

Indexer haben folgende Anforderungen:

  • Eine "name" Eigenschaft, die den Indexer in der Indexer-Sammlung eindeutig identifiziert.
  • Eine "dataSourceName" Eigenschaft, die auf ein Datenquellenobjekt verweist. Dient zum Angeben einer Verbindung mit externen Daten.
  • Eine "targetIndexName"-Eigenschaft, die auf den Zielsuchindex verweist.

Weitere Parameter sind optional und ändern das Verhalten zur Laufzeit. So können Sie beispielsweise steuern, wie viele Fehler akzeptiert werden, bevor der gesamte Auftrag als fehlerhaft betrachtet wird. Erforderliche Parameter werden in allen Indexern angegeben und sind in der REST API-Referenz dokumentiert.

Datenquellenspezifische Indexer für Blobs, SQL und Azure Cosmos DB bieten zusätzliche "configuration" Parameter für quellenspezifische Verhaltensweisen. Handelt es sich bei der Quelle beispielsweise um einen Blobspeicher, können Sie einen Parameter zum Filtern nach Dateierweiterungen festlegen: "parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }. Wenn die Quelle „Azure SQL“ ist, können Sie einen Abfragetimeoutparameter festlegen.

Feldzuordnungen dienen der expliziten Zuordnung von Quell- zu Zielfeldern, wenn es Diskrepanzen zwischen einem Feld in der Datenquelle und einem Feld im Suchindex hinsichtlich Name oder Typ gibt.

Ein Indexer wird standardmäßig sofort ausgeführt, wenn Sie ihn im Suchdienst erstellen. Wenn Sie die Ausführung des Indexers nicht wünschen, setzen Sie "disabled" auf true, wenn Sie den Indexer erstellen.

Sie können auch einen Zeitplan angeben oder einen Verschlüsselungsschlüssel für die zusätzliche Verschlüsselung der Indexerdefinition festlegen.

Indexer-Beispiel für kompetenzbasierte Indexierung

Indexer werden auch für die KI-Anreicherung eingesetzt. Alle oben genannten Eigenschaften und Parameter gelten, aber die folgenden zusätzlichen Eigenschaften sind spezifisch für die AI-Anreicherung: "skillSetName", "cache", "outputFieldMappings".

{
  "name": (required) String that uniquely identifies the indexer,
  "dataSourceName": (required) String, provides raw content that will be enriched,
  "targetIndexName": (required) String, name of an existing index,
  "skillsetName" : (required for AI enrichment) String, name of an existing skillset,
  "cache":  {
    "storageConnectionString" : (required if you enable the cache) Connection string to a blob container,
    "enableReprocessing": true
    },
  "parameters": { },
  "fieldMappings": (optional) Maps fields in the underlying data source to fields in an index,
  "outputFieldMappings" : (required) Maps skill outputs to fields in an index,
}

Die KI-Anreicherung ist ein eigener Themenbereich, der in diesem Artikel nicht behandelt wird. Wenn Sie weitere Informationen benötigen, beginnen Sie mit KI-Anreicherung, Skillsetkonzepte in Azure AI Search, Erstellen eines Skillsets, Zuordnen von Ausgabefeldern für die Anreicherung und Aktivieren der Zwischenspeicherung für die KI-Anreicherung.

Vorbereiten externer Daten

Indexer arbeiten mit Datasets. Wenn Sie einen Indexer ausführen, stellt er eine Verbindung mit Ihrer Datenquelle her, ruft die Daten aus dem Container oder Ordner ab und serialisiert sie optional zu JSON, bevor sie zur Indizierung an die Suchmaschine übergeben werden. In diesem Abschnitt werden die Anforderungen an eingehende Daten für die textbasierte Indizierung beschrieben.

Quelldaten Aufgaben
JSON-Dokumente Stellen Sie sicher, dass die Struktur oder Form der eingehenden Daten dem Schema Ihres Suchindex entspricht. Die meisten Suchindizes sind ziemlich flach. Das bedeutet, dass die Feldersammlung Felder auf der gleichen Ebene umfasst. Über komplexe Felder und Auflistungen sind jedoch auch hierarchische oder geschachtelte Strukturen möglich.
Relational Stellen Sie sie als reduzierten Zeilensatz bereit, wobei jede Zeile ein vollständiges oder teilweises Suchdokument im Index darstellt.

Wenn Sie relationale Daten zu einem Rowset vereinfachen möchten, sollten Sie eine SQL-Sicht erstellen (oder eine Abfrage, die übergeordnete und untergeordnete Datensätze in der gleichen Zeile zurückgibt). Bei dem integrierten Hotel-Beispieldataset handelt es sich beispielsweise um eine SQL-Datenbank mit 50 Datensätzen (jeweils einer pro Hotel), die mit Zimmerdatensätzen in einer verwandten Tabelle verknüpft sind. Die Abfrage, mit der die gesamten Daten zu einem Rowset vereinfacht werden, bettet alle Zimmerinformationen in JSON-Dokumenten in den jeweiligen Hoteldatensatz ein. Die eingebetteten Zimmerinformationen werden durch eine Abfrage mit einer Klausel vom Typ FOR JSON AUTO generiert.

Weitere Informationen zu dieser Technik finden Sie unter Definieren einer Abfrage, die eingebetteten JSON-Code zurückgibt. Dies ist nur ein Beispiel; Sie können andere Ansätze finden, die das gleiche Ergebnis liefern.
Dateien Ein Indexer erstellt im Allgemeinen ein Suchdokument für jede Datei, wobei das Suchdokument aus Feldern für Inhalte und Metadaten besteht. Je nach Dateityp kann der Indexer manchmal eine einzelne Datei in mehrere Suchdokumente auflösen. In einer CSV-Datei kann beispielsweise jede Zeile zu einem eigenständigen Suchdokument werden.

Denken Sie daran, dass Sie nur durchsuchbare und filterbare Daten benötigen:

  • Durchsuchbare Daten sind Text.
  • Filterbare Daten sind alphanumerisch.

Azure AI Search kann keine Binärdaten in irgendeinem Format durchsuchen, obwohl es Textbeschreibungen von Bilddateien extrahieren und ableiten kann (siehe KI-Anreicherung), um durchsuchbare Inhalte zu erstellen. Außerdem können umfangreiche Texte durch Modelle für natürliche Sprache zerlegt und analysiert werden, um die Struktur oder relevante Informationen zu ermitteln und neue Inhalte zu erstellen, die Sie einem Suchdokument hinzufügen können.

Da durch Indexer keine Datenprobleme behoben werden, sind ggf. andere Arten der Datenbereinigung oder -bearbeitung erforderlich. Weitere Informationen finden Sie in der Produktdokumentation Ihres Azure-Datenbankprodukts.

Vorbereiten einer Datenquelle

Indexer erfordern eine Datenquelle, die den Typ, den Container und die Verbindung angibt.

  1. Achten Sie darauf, einen unterstützten Datenquellentyp zu verwenden.

  2. Erstellen Sie eine Datenquellendefinition. (Weitere Informationen finden Sie hier.) Die folgende Liste enthält einige der häufiger verwendeten Datenquellen:

  3. Wenn es sich bei der Datenquelle um eine Datenbank handelt, z. B. Azure SQL oder Cosmos DB, aktivieren Sie die Änderungsnachverfolgung. Azure Storage verfügt über eine integrierte Änderungsverfolgung durch die LastModified-Eigenschaft in jedem Blob, jeder Datei und jeder Tabelle. Die obigen Links für die verschiedenen Datenquellen erläutern, welche Methoden zur Änderungsnachverfolgung von Indexern unterstützt werden.

Vorbereiten eines Index

Indexer benötigen auch einen Suchindex. Wie bereits erwähnt, übergeben Indexer Daten zur Indizierung an die Suchmaschine. Doch nicht nur Indexer verfügen über Eigenschaften zur Steuerung des Ausführungsverhaltens, auch ein Indexschema besitzt Eigenschaften, die sich grundlegend auf die Indizierung von Zeichenfolgen auswirken. (Nur Zeichenfolgen werden analysiert und mit Token versehen.)

  1. Beginnen Sie mit Erstellen eines Index in Azure Cognitive Search.

  2. Richten Sie die Feldersammlung und die Feldattribute ein.

    Externe Inhalte werden stets von Feldern aufgenommen. Je nachdem, wie die Felder im Schema zugeordnet sind, werden die Werte für jedes Feld analysiert, tokenisiert oder als wortwörtliche Zeichenketten für Filter, Fuzzy-Suche und Typeahead-Abfragen gespeichert.

    Indexer können Quellfelder automatisch Zielindexfeldern zuordnen, wenn die Namen und Typen äquivalent sind. Wenn ein Feld nicht implizit zugeordnet werden kann, denken Sie daran, dass Sie eine explizite Feldzuordnung definieren können, um dem Indexer mitzuteilen, wie der Inhalt weitergeleitet werden soll.

  3. Überprüfen Sie die Zuweisungen des Analysetools für jedes Feld. Analysetools können Zeichenfolgen transformieren. Das kann dazu führen, dass sich indizierte Zeichenfolgen von den übergebenen Inhalten unterscheiden. Die Auswirkungen von Analysetools können mithilfe von Text analysieren (Azure Cognitive Search-REST-API) ausgewertet werden. Weitere Informationen zu Analysetools finden Sie unter Analysetools für Textverarbeitung in der kognitiven Azure-Suche.

Während der Indizierung werden vom Indexer nur Feldnamen und -typen untersucht. Es gibt keinen Validierungsschritt, um die Richtigkeit des eingehenden Inhalts für das entsprechende Suchfeld im Index zu überprüfen.

Erstellen eines Indexers

Wenn Sie bereit sind, einen Indexer auf einem entfernten Suchdienst zu erstellen, benötigen Sie einen Suchclient. Ein Suchclient kann das Azure-Portal, ein REST-Client oder Code sein, der einen Indexerclient instanziiert. Für die anfängliche Entwicklung sowie für Proof of Concept-Tests empfiehlt sich die Verwendung des Azure-Portals oder der REST-APIs.

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie auf der Seite „Übersicht“ des Suchdiensts aus zwei Optionen aus:

    • Datenimport-Assistent. Das Besondere an dem Assistenten ist, dass er alle erforderlichen Elemente erstellt. Bei anderen Ansätzen sind eine vordefinierte Datenquelle und ein Index erforderlich.

    • Neuer Indexer, ein visueller Editor zur Angabe einer Indexerdefinition

    Der folgende Screenshot zeigt, wo sich diese Features im Portal befinden:

    Hotelindexer

Ausführen des Indexers

Ein Indexer wird standardmäßig sofort ausgeführt, wenn Sie ihn im Suchdienst erstellen. Sie können dieses Verhalten außer Kraft setzen, indem Sie "disabled" in der Indexer-Definition auf true setzen. Die Ausführung des Indexers ist der Moment der Wahrheit, in dem Sie herausfinden, ob es Probleme mit Verbindungen, Feldzuordnungen oder dem Aufbau von Skillsets gibt.

Ein Indexer kann auf verschiedene Arten ausgeführt werden:

Die geplante Ausführung wird in der Regel implementiert, wenn Sie eine inkrementelle Indizierung benötigen, um die neuesten Änderungen übernehmen zu können. Daher ist die Planung von der Änderungserkennung abhängig.

Indexer sind eines der wenigen Subsysteme, die offene ausgehende Anrufe an andere Azure-Ressourcen tätigen. In Bezug auf Azure-Rollen haben Indexer keine separaten Identitäten: eine Verbindung von der Suchmaschine zu einer anderen Azure-Ressource wird über die system- oder benutzerseitig zugewiesene verwaltete Identität eines Suchdienstes hergestellt. Wenn der Indexer eine Verbindung zu einer Azure-Ressource in einem virtuellen Netzwerk herstellt, sollten Sie eine gemeinsame private Verbindung dafür erstellen. Weitere Informationen zu sicheren Verbindungen finden Sie unter Sicherheit für die Azure KI-Suche.

Überprüfen der Ergebnisse

Überwachen Sie den Indexerstatus. Auch eine erfolgreiche Ausführung kann Warnungen und Benachrichtigungen enthalten. Überprüfen Sie sowohl erfolgreiche als auch fehlgeschlagene Statusbenachrichtigungen auf Details zum Auftrag.

Zur Überprüfung des Inhalts können Sie Abfragen für den aufgefüllten Index ausführen, die gesamte Dokumente oder ausgewählte Felder zurückgeben.

Änderungserkennung und interner Zustand

Wenn Ihre Datenquelle die Änderungserkennung unterstützt, kann ein Indexer zugrunde liegende Änderungen an den Daten erkennen und bei jeder Ausführung nur die neuen oder geänderten Dokumente verarbeiten. Unveränderte Dokumente werden dann ignoriert. Wenn im Indexerverlauf steht, dass eine Ausführung mit 0/0 verarbeiteten Dokumenten erfolgreich war, bedeutet dies, dass der Indexer in der zugrunde liegenden Datenquelle keine neuen oder geänderten Zeilen oder Blobs gefunden hat.

Die Änderungserkennungslogik ist in die Datenplattformen integriert. Die Unterstützung der Änderungserkennung durch einen Indexer hängt von der Datenquelle ab:

Indexer verfolgen das letzte Dokument, das sie von der Datenquelle verarbeitet haben, durch eine interne Hochwassermarke. Der Marker wird nie in der API verfügbar gemacht, aber intern verfolgt der Indexer die Position nach, an der er angehalten wurde. Wenn die Indizierung entweder über eine geplante Ausführung oder einen bedarfsgesteuerten Aufruf fortgesetzt wird, orientiert sich der Indexer an der oberen Grenze, sodass er an der Stelle fortgesetzt werden kann, an der er aufgehört hat.

Wenn Sie die obere Grenze für eine vollständige Neuindizierung löschen müssen, können Sie Indexer zurücksetzen verwenden. Verwenden Sie zur selektiveren Neuindizierung Skills zurücksetzen oder Dokumente zurücksetzen. Durch die Zurücksetzungs-APIs können Sie den internen Status löschen und auch den Cache leeren, wenn Sie Inkrementelle Anreicherung aktiviert haben. Weitere Hintergrundinformationen und Vergleiche der einzelnen Rücksetzungsoptionen finden Sie unter Ausführen oder Zurücksetzen von Indexern, Qualifikationen und Dokumenten.

Nächste Schritte