Laden von Daten in einen Suchindex in Azure AI Search
In diesem Artikel wird erläutert, wie Dokumente in einen vordefinierten Suchindex importiert werden. In Azure KI-Suche wird zunächst ein Suchindex erstellt, der Datenimport folgt dann in einem zweiten Schritt. Eine Ausnahme bilden Import-Assistenten im Portal und die Indexerpipelines, die einen Index in einem Workflow erstellen und laden.
Funktionsweise des Datenimports
Ein Suchdienst akzeptiert JSON-Dokumente, die dem Indexschema entsprechen. Ein Suchdienst importiert und indiziert Nur-Text und Vektoren in JSON, die in Szenarien mit Volltextsuche, Vektorsuche, Hybridsuche und Knowledge Mining verwendet werden.
Nur-Text-Inhalte können aus alphanumerischen Feldern in der externen Datenquelle, aus Metadaten, die in Suchszenarien nützlich sind, oder aus angereicherten Inhalten, die von einem Skillset erstellt wurden, abgerufen werden (Skills können Textbeschreibungen aus Bildern und unstrukturierten Inhalten extrahieren oder ableiten).
Vektorinhalte werden mithilfe eines externen Einbettungsmodells oder einer integrierten Vektorisierung vektorisiert. Dabei werden Features von Azure KI-Suche genutzt, die mit der angewandten KI integriert werden.
Sie können diese Dokumente selbst vorbereiten. Wenn sich der Inhalt aber in einer unterstützten Datenquelle befindet, können Sie mit einem Indexer oder dem Import-Assistenten den Abruf der Dokumente, die JSON-Serialisierung und die Indizierung automatisieren.
Nachdem die Daten indiziert wurden, werden die physischen Datenstrukturen des Indexes gesperrt. Einen Leitfaden dazu, was geändert werden kann, finden Sie unter Aktualisieren und Neuerstellen eines Index.
Die Indizierung ist kein Hintergrundprozess. Ein Suchdienst gleicht Indizierungs- und Abfrageworkloads aus. Wenn die Abfragewartezeit jedoch zu lang ist, können Sie entweder Kapazität hinzufügen oder Zeiträume mit geringer Abfrageaktivität zum Laden eines Indexes identifizieren.
Weitere Informationen finden Sie unter Datenimportstrategien.
Verwenden des Azure-Portals
Verwenden Sie die Import-Assistenten im Azure-Portal, um Indizes in einem nahtlosen Workflow zu erstellen und zu laden. Wenn Sie einen vorhandenen Index laden möchten, wählen Sie einen alternativen Ansatz aus.
Melden Sie sich mit Ihrem Azure-Konto beim Azure-Portal an, und suchen Sie Ihren Suchdienst.
Wählen Sie auf der Übersichtsseite auf der Befehlsleiste Daten importieren oder Daten importieren und vektorisieren aus, um einen Suchindex zu erstellen und aufzufüllen.
Sie können diesen Links folgen, um den Workflow zu überprüfen: Schnellstart: Erstellen eines Index für Azure KI-Suche und Schnellstart: Integrierte Vektorisierung.
Verwenden Sie nach Abschluss des Assistenten den Such-Explorer, um die Ergebnisse zu überprüfen.
Tipp
Die Import-Assistenten erstellen die Indexer und führen sie aus. Wenn Indexer bereits definiert sind, können Sie einen Indexer aus dem Azure-Portal zurücksetzen und ausführen, was hilfreich ist, wenn Sie Felder inkrementell hinzufügen. Beim Zurücksetzen wird der Indexer dazu gezwungen, neu zu beginnen. Dabei werden alle Felder aus allen Quelldokumenten übernommen.
Verwenden der REST-APIs
Dokumente indizieren ist die REST-API zum Importieren von Daten in einen Suchindex. REST-APIs sind nützlich für anfängliche Proof of Concept-Tests, bei denen Sie Indizierungsworkflows testen können, ohne viel Code schreiben zu müssen. Der@search.action
-Parameter bestimmt, ob Dokumente vollständig oder teilweise in Bezug auf neue oder Ersetzungswerte für bestimmte Felder hinzugefügt werden.
Schnellstart: Die Textsuche mithilfe von REST erläutert die Schritte. Das folgende Beispiel ist eine geänderte Version des Beispiels. Es wurde aus Gründen der Übersichtlichkeit gekürzt, und der erste HotelId-Wert wurde geändert, um zu vermeiden, dass ein vorhandenes Dokument überschrieben wird.
Formulieren Sie einen POST-Aufruf, der den Indexnamen, den Endpunkt „docs/index“ und einen Anforderungstext mit dem
@search.action
-Parameter angibt.POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/index?api-version=2024-07-01 Content-Type: application/json api-key: [admin key] { "value": [ { "@search.action": "upload", "HotelId": "1111", "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.", "Category": "Boutique", "Tags": [ "pool", "air conditioning", "concierge" ] }, { "@search.action": "mergeOrUpload", "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "This is description is replacing the original one for this hotel. New and changed values overwrite the previous ones. In a comma-delimited list like Tags, be sure to provide the full list because there is no merging of values within the field itself.", "Category": "Boutique", "Tags": [ "pool", "free wifi", "concierge", "my first new tag", "my second new tag" ] } ] }
Legen Sie den
@search.action
-Parameter aufupload
fest, um ein Dokument zu erstellen oder zu überschreiben. Legen Sie den Wert aufmerge
oderuploadOrMerge
fest, wenn Sie bestimmte Felder im Dokument aktualisieren möchten. Im vorherigen Beispiel werden beide Aktionen gezeigt.Aktion Auswirkung merge Aktualisiert ein bereits vorhandenes Dokument und schlägt fehl, wenn das Dokument nicht gefunden werden kann. Merge ersetzt vorhandene Werte. Achten Sie deshalb darauf, nach Sammlungsfeldern zu suchen, die mehrere Werte enthalten, z. B. Felder vom Typ Collection(Edm.String)
. Wenn beispielsweise eintags
-Feld mit dem Wert["budget"]
beginnt und Sie eine Zusammenführung mit["economy", "pool"]
durchführen, lautet der Wert für dastags
-Feld am Ende des Vorgangs["economy", "pool"]
. Der Wert lautet nicht etwa["budget", "economy", "pool"]
.mergeOrUpload Verhält sich wie Zusammenführen, wenn das Dokument vorhanden ist, und wie Hochladen, wenn das Dokument neu ist. Dies ist die häufigste Aktion für inkrementelle Updates. upload Ähnelt einem „Upsert“, bei dem das Dokument eingefügt wird, wenn es neu ist, und aktualisiert oder ersetzt wird, wenn es bereits vorhanden ist. Wenn im Dokument Werte fehlen, die der Index benötigt, wird der Wert des Dokumentfelds auf NULL festgelegt. Senden Sie die Anforderung.
Suchen Sie die Dokumente, die Sie soeben als Validierungsschritt hinzugefügt haben:
GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/1111?api-version=2024-07-01
Wenn der Dokumentschlüssel oder die ID neu ist, wird NULL der Wert für jedes Feld, das im Dokument nicht angegeben ist. Bei Aktionen für ein vorhandenes Dokument ersetzen aktualisierte Werte die vorherigen Werte. Alle Felder, die nicht in einem Vorgang vom Typ „merge“ oder „mergeUpload“ angegeben wurden, bleiben im Suchindex erhalten.
Verwenden der Azure SDKs
Die Programmierbarkeit wird über die folgenden Azure-SDKs bereitgestellt.
Das Azure-SDK für .NET stellt die folgenden APIs für Einzel- und Massenuploads von Dokumenten in einen Index bereit:
Es gibt mehrere Beispiele, die die Indizierung im Kontext der einfachen und umfangreichen Indizierung veranschaulichen:
„Laden eines Indexes“ erläutert die grundlegenden Schritte.
Azure.Search.Documents Samples – Indizieren von Dokumenten des Azure SDK-Teams fügt SearchIndexingBufferedSender hinzu.
Tutorial: Indizieren beliebiger Daten verbindet die Batchindizierung mit Teststrategien zur Bestimmung der optimalen Größe.
Sehen Sie sich unbedingt die Codebeispiele im Repository azure-search-vector-samples an, die zeigen, wie Vektorfelder indiziert werden.