Einen Indexer in Azure AI Search erstellen
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.
Sie können einen Indexer verwenden, um den Datenimport und die Indizierung in Azure KI-Suche 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: Extrahieren Sie Zeichenfolgen und Metadaten aus Textinhalten für Volltextsuchszenarien.
Skills-basierte Indizierung: Verwenden Sie integrierte oder benutzerdefinierte Skills, die integriertes maschinelles Lernen für die Analyse von Bildern und großen undifferenzierten Inhalten hinzufügen und Text und Struktur extrahieren oder ableiten. Die Skills-basierte 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.
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. Der Free-Tarif erlaubt drei Objekte jedes Typs und 1-3 Minuten Indexer-Verarbeitung, oder 3-10 Minuten, wenn ein Skillset vorhanden ist.
Indexer-Muster
Wenn Sie einen Indexer erstellen, gibt es zwei Definitionsmuster: textbasierte Indexierung oder Skills-basierte Indexierung. 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. Für diesen Workflow sieht ein Indexer wie in diesem 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. Sie spezifiziert eine Verbindung zu 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 Blob Storage, können Sie einen Parameter zum Filtern nach Dateierweiterungen festlegen, beispielsweise:
"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 WAHR fest, 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
Die Skills-basierte Indizierung verwendet die KI-Anreicherung, um Inhalte zu verarbeiten, die in ihrer rohen Form nicht durchsuchbar sind. Alle oben genannten Eigenschaften und Parameter gelten, aber die folgenden zusätzlichen Eigenschaften sind spezifisch für die KI-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, Skillsets in Azure KI-Suche, Erstellen eines Skillsets, Zuordnen angereicherter Ausgabefelder 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 Daten als vereinfachten 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.
Achten Sie darauf, einen unterstützten Datenquellentyp zu verwenden.
Erstellen Sie eine Datenquellendefinition. (Weitere Informationen finden Sie hier.) Die folgenden Datenquellen sind einige der häufiger verwendeten Quellen:
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 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.)
Beginnen Sie mit Erstellen eines Index in Azure Cognitive Search.
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.
Ü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.
Melden Sie sich beim Azure-Portal an, und suchen Sie dann den Suchdienst.
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.
Indexer hinzufügen: Ein visueller Editor zum Spezifizieren einer Indexerdefinition.
Ausführen des Indexers
Ein Indexer wird standardmäßig sofort ausgeführt, wenn Sie ihn im Suchdienst erstellen. Sie können dieses Verhalten überschreiben, indem Sie disabled
in der Indexerdefinition auf WAHR 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:
Ausführung beim Erstellen oder Aktualisieren des Indexers (Standard).
Ausführung bei Bedarf, wenn keine Änderungen an der Definition vorgenommen wurden, oder nach einem Reset zur vollständigen Indexierung. Weitere Informationen finden Sie unter Ausführen oder Zurücksetzen von Indexern, Qualifikationen oder Dokumenten.
Planen Sie den Indizierungsvorgang zeitlich so, dass er regelmäßig ausgeführt wird.
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 systemseitig 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 der Ausführungsverlauf des Indexers besagt, dass eine Ausführung mit 0/0 verarbeiteten Dokumenten erfolgreich war, bedeutet dies, dass der Indexer keine neuen oder geänderten Zeilen oder Blobs in der zugrunde liegenden Datenquelle gefunden hat.
Die Änderungserkennungslogik ist in die Datenplattformen integriert. Die Unterstützung der Änderungserkennung durch einen Indexer hängt von der Datenquelle ab:
Azure Storage verfügt über eine integrierte Änderungserkennung. Das bedeutet, dass ein Indexer neue und aktualisierte Dokumente automatisch erkennen kann. Blob Storage, Azure Table Storage und Azure Data Lake Storage Gen2 versehen jedes Blob- oder Zeilenupdate mit einem Datums- und Uhrzeitstempel. Anhand dieser Informationen kann ein Indexer automatisch bestimmen, welche Dokumente im Index aktualisiert werden müssen. Weitere Informationen zur Erkennung von Löschungen finden Sie unter Erkennung von Änderungen und Löschungen mit Indexern für Azure Storage.
Technologien von Clouddatenbanken bieten auf ihren Plattformen optionale Features für die Erkennung von Änderungen. Für diese Datenquellen erfolgt die Änderungserkennung nicht automatisch. Sie müssen in der Datenquellendefinition angeben, welche Richtlinie verwendet wird:
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.