Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie einen Indexer konfigurieren, der Inhalte aus der Azure SQL-Datenbank oder aus verwalteten Azure SQL-Instanzen importiert und in Azure KI-Suche durchsuchbar macht.
Dieser Artikel ergänzt den Artikel Erstellen von Indexern mit spezifischen Informationen für Azure SQL. Er verwendet das Azure-Portal und REST-APIs, um einen dreiteiligen Workflow zu veranschaulichen, der allen Indexern gemeinsam ist: Erstellen einer Datenquelle, Erstellen eines Indexes und Erstellen eines Indexers. Die Datenextraktion erfolgt, wenn Sie die Anforderung für die Indexererstellung übermitteln.
Dieser Artikel enthält auch Folgendes:
Eine Beschreibung der vom Azure SQL-Indexer unterstützten Änderungserkennungsrichtlinien, damit Sie inkrementelle Indizierung einrichten können.
Ein Abschnitt mit häufig gestellten Fragen (FAQs) mit Antworten auf Fragen zur Featurekompatibilität.
Hinweis
Die Datensynchronisierung in Echtzeit ist mit einem Indexer nicht möglich. Ein Indexer kann die Tabelle höchstens alle fünf Minuten erneut indizieren. Wenn Datenupdates schneller im Index widergespiegelt werden müssen, empfehlen wir, aktualisierte Zeilen direkt per Push zu senden.
Voraussetzungen
Eine Azure SQL-Datenbank oder eine SQL Managed Instance mit einem öffentlichen Endpunkt.
Eine einzelne Tabelle oder Ansicht.
Verwenden Sie eine Tabelle, wenn Ihre Daten groß sind oder wenn Sie eine inkrementelle Indizierung mithilfe der systemeigenen Funktionen zur Änderungserkennung (SQL Integrated Change Tracking) benötigen, um neue, geänderte und gelöschte Zeilen im Suchindex widerzuspiegeln.
Verwenden Sie eine Ansicht, wenn Sie Daten aus mehreren Tabellen konsolidieren müssen. Große Ansichten sind für SQL-Indexer nicht ideal. Eine Problemumgehung besteht darin, eine neue Tabelle nur für die Erfassung in den Azure KI-Suche-Index zu erstellen. Wenn Sie sich für eine Sicht entscheiden, können Sie die Höchstwerterkennung als Änderungserkennung verwenden, müssen dann aber eine Problemumgehung für die Löscherkennung verwenden.
Der Primärschlüssel muss einen einzelwertigen Wert aufweisen. In einer Tabelle muss sie auch nicht gruppiert sein, um die vollständige integrierte SQL-Änderungsnachverfolgung zu erhalten.
Leseberechtigungen. Azure KI-Suche unterstützt die SQL Server-Authentifizierung, bei der Benutzername und Kennwort in der Verbindungszeichenfolge angegeben werden. Alternativ können Sie eine verwaltete Identität einrichten und Azure-Rollen mit Mitgliedschaft in SQL Server-Mitwirkenden - oder SQL DB-Mitwirkendenrollen verwenden.
Um die Beispiele in diesem Artikel durchzuarbeiten, benötigen Sie das Azure-Portal oder einen REST-Client. Wenn Sie das Azure-Portal verwenden, stellen Sie sicher, dass der Zugriff auf alle öffentlichen Netzwerke in der Azure SQL-Firewall aktiviert ist und dass der Zugriff des Clients über eine Regel für eingehenden Datenverkehr erfolgt. Konfigurieren Sie für einen lokal ausgeführten REST-Client die SQL Server-Firewall, um eingehenden Zugriff von Ihrer Geräte-IP-Adresse zu ermöglichen. Andere Ansätze zum Erstellen eines Azure SQL-Indexers beinhalten Azure SDKs.
Mit Beispieldaten testen
Verwenden Sie diese Anweisungen, um eine Tabelle in Azure SQL-Datenbank zu Testzwecken zu erstellen und zu laden.
Laden Sie „hotels-azure-sql.sql“ von GitHub herunter, um eine Tabelle in Azure SQL-Datenbank zu erstellen, die eine Teilmenge des Beispieldatasets „Hotels“ enthält.
Melden Sie sich beim Azure-Portal an, und erstellen Sie eine Azure SQL-Datenbank und einen Datenbankserver. Erwägen Sie die Konfiguration der SQL Server-Authentifizierung und der Microsoft Entra ID-Authentifizierung. Wenn Sie nicht über Berechtigungen zum Konfigurieren von Rollen in Azure verfügen, können Sie die SQL-Authentifizierung als Problemumgehung verwenden.
Konfigurieren Sie die Serverfirewall für alle eingehenden Anforderungen von Ihrem lokalen Gerät.
Wählen Sie in Ihrer Azure SQL-Datenbank Abfrage-Editor (Vorschau) und dann Neue Abfrage aus.
Fügen Sie das T-SQL-Skript ein, das die Hoteltabelle erstellt, und führen Sie es aus. Ein nicht gruppierter Primärschlüssel ist eine Anforderung für die integrierte SQL-Änderungsnachverfolgung.
CREATE TABLE tbl_hotels ( Id TINYINT PRIMARY KEY NONCLUSTERED, Modified DateTime NULL DEFAULT '0000-00-00 00:00:00', IsDeleted TINYINT, HotelName VARCHAR(40), Category VARCHAR(20), City VARCHAR(30), State VARCHAR(4), Description VARCHAR(500) );
Fügen Sie das T-SQL-Skript ein, das Datensätze einfügt, und führen Sie es aus.
-- Insert rows INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (1, CURRENT_TIMESTAMP, 0, 'Stay-Kay City Hotel', 'Boutique', 'New York', 'NY', 'This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of Americas most attractive and cosmopolitan cities.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (10, CURRENT_TIMESTAMP, 0, 'Countryside Hotel', 'Extended-Stay', 'Durham', 'NC', 'Save up to 50% off traditional hotels. Free WiFi, great ___location near downtown, full kitchen, washer & dryer, 24\/7 support, bowling alley, fitness center and more.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (11, CURRENT_TIMESTAMP, 0, 'Royal Cottage Resort', 'Extended-Stay', 'Bothell', 'WA', 'Your home away from home. Brand new fully equipped premium rooms, fast WiFi, full kitchen, washer & dryer, fitness center. Inner courtyard includes water features and outdoor seating. All units include fireplaces and small outdoor balconies. Pets accepted.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (12, CURRENT_TIMESTAMP, 0, 'Winter Panorama Resort', 'Resort and Spa', 'Wilsonville', 'OR', 'Plenty of great skiing, outdoor ice skating, sleigh rides, tubing and snow biking. Yoga, group exercise classes and outdoor hockey are available year-round, plus numerous options for shopping as well as great spa services. Newly-renovated with large rooms, free 24-hr airport shuttle & a new restaurant. Rooms\/suites offer mini-fridges & 49-inch HDTVs.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (13, CURRENT_TIMESTAMP, 0, 'Luxury Lion Resort', 'Luxury', 'St. Louis', 'MO', 'Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium and transportation hubs, we feature the best in convenience and comfort.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (14, CURRENT_TIMESTAMP, 0, 'Twin Vortex Hotel', 'Luxury', 'Dallas', 'TX', 'New experience in the making. Be the first to experience the luxury of the Twin Vortex. Reserve one of our newly-renovated guest rooms today.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (15, CURRENT_TIMESTAMP, 0, 'By the Market Hotel', 'Budget', 'New York', 'NY', 'Book now and Save up to 30%. Central ___location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (16, CURRENT_TIMESTAMP, 0, 'Double Sanctuary Resort', 'Resort and Spa', 'Seattle', 'WA', '5 Star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in\/out, Fitness Center & espresso in room.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (17, CURRENT_TIMESTAMP, 0, 'City Skyline Antiquity Hotel', 'Boutique', 'New York', 'NY', 'In vogue since 1888, the Antiquity Hotel takes you back to bygone era. From the crystal chandeliers that adorn the Green Room, to the arched ceilings of the Grand Hall, the elegance of old New York beckons. Elevate Your Experience. Upgrade to a premiere city skyline view for less, where old world charm combines with dramatic views of the city, local cathedral and midtown.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (18, CURRENT_TIMESTAMP, 0, 'Ocean Water Resort & Spa', 'Luxury', 'Tampa', 'FL', 'New Luxury Hotel for the vacation of a lifetime. Bay views from every room, ___location near the pier, rooftop pool, waterfront dining & more.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (19, CURRENT_TIMESTAMP, 0, 'Economy Universe Motel', 'Budget', 'Redmond', 'WA', 'Local, family-run hotel in bustling downtown Redmond. We are a pet-friendly establishment, near expansive Marymoor park, haven to pet owners, joggers, and sports enthusiasts. Close to the highway and just a short drive away from major cities.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (20, CURRENT_TIMESTAMP, 0, 'Delete Me Hotel', 'Unknown', 'Nowhere', 'XX', 'Test-case row for change detection and delete detection . For change detection, modify any value, and then re-run the indexer. For soft-delete, change IsDelete from zero to a one, and then re-run the indexer.');
Führen Sie eine Abfrage aus, um den Upload zu bestätigen.
SELECT Description FROM tbl_hotels;
Die Ergebnisse sollten etwa wie auf dem folgenden Screenshot aussehen:
Das Feld „Beschreibung“ enthält den ausführlichsten Inhalt. Sie sollten dieses Feld für die Volltextsuche und optionale Vektorisierung verwenden.
Sie verfügen nun über eine Datenbanktabelle und können jetzt das Azure-Portal, den REST-Client oder ein Azure SDK verwenden, um Ihre Daten zu indizieren.
Tipp
Eine weitere Ressource, die Beispielinhalte und Code bereitstellt, finden Sie unter Azure-Samples/SQL-AI-Samples.
Einrichten der Indexerpipeline
Geben Sie in diesem Schritt die Datenquelle, den Index und den Indexer an.
Stellen Sie sicher, dass Ihre SQL-Datenbank aufgrund von Inaktivität aktiv und nicht angehalten ist. Navigieren Sie im Azure-Portal zur Datenbankserverseite, und überprüfen Sie, ob der Datenbankstatus online ist. Sie können eine Abfrage für eine beliebige Tabelle ausführen, um die Datenbank zu aktivieren.
Stellen Sie sicher, dass Sie über eine Tabelle oder Ansicht verfügen, die die Anforderungen für Indexer und die Änderungserkennung erfüllt.
Zuerst können Sie nur aus einer einzelnen Tabelle oder Ansicht ziehen. Wir empfehlen die Verwendung von Tabellen, da sie die SQL-integrierte Änderungsnachverfolgungs-Richtlinie unterstützen, die neue, aktualisierte und gelöschte Zeilen erkennt. Eine Richtlinie zur Erkennung von Höchstwerten unterstützt nicht das Löschen von Zeilen und ist schwieriger zu implementieren.
Zweitens muss der Primärschlüssel ein einzelner Wert (Verbundschlüssel werden nicht unterstützt) und nicht gruppiert sein.
Wechseln Sie zu Ihrem Suchdienst, und erstellen Sie eine Datenquelle. Wählen Sie unter "Datenquellen für die Suchverwaltung>" die Option "Datenquelle hinzufügen" aus:
- Wählen Sie für den Datenquellentyp Azure SQL-Datenbank aus.
- Geben Sie einen Namen für das Datenquellenobjekt in Azure AI Search an.
- Verwenden Sie die Dropdownlisten, um den Abonnement-, Kontotyp, Server- oder Datenbank-, Tabellen- oder Ansichts-, Schema- und Tabellennamen auszuwählen.
- Für die Änderungsnachverfolgung empfehlen wir sql Integrated Change Tracking Policy.
- Für die Authentifizierung wird empfohlen, eine Verbindung mit einer verwalteten Identität herzustellen. Ihr Suchdienst muss über eine Rollenmitgliedschaft als SQL Server-Mitwirkender oder SQL DB-Mitwirkender auf der Datenbank verfügen.
- Wählen Sie "Erstellen" aus, um die Datenquelle zu erstellen.
Verwenden Sie einen Import-Assistenten , um den Index und den Indexer zu erstellen.
Wählen Sie auf der Seite "Übersicht" die Option "Daten importieren " oder "Daten importieren" (neu) aus.
Wählen Sie die soeben erstellte Datenquelle aus.
Überspringen Sie den Schritt zum Hinzufügen von KI-Anreicherungen.
Benennen Sie den Index, legen Sie den Schlüssel auf Ihren Primärschlüssel in der Tabelle fest, attributieren Sie alle Felder als "Abrufbar" und "Durchsuchbar", und fügen Sie optional " Filterable " und "Sortierbar " für kurze Zeichenfolgen oder numerische Werte hinzu.
Benennen Sie den Indexer, und schließen Sie den Assistenten ab, um die erforderlichen Objekte zu erstellen.
Überprüfen des Indexerstatus
Um den Indexerstatus und den Ausführungsverlauf zu überwachen, überprüfen Sie den Indexerausführungsverlauf im Azure-Portal, oder senden Sie die REST-API-Anforderung Get Indexer Status.
Öffnen Sie auf der Suchdienstseite Suchverwaltung>Indexer.
Wählen Sie einen Indexer aus, um auf den Konfigurations- und Ausführungsverlauf zuzugreifen.
Wählen Sie einen bestimmten Indexerauftrag aus, um Details, Warnungen und Fehler anzuzeigen.
Der Ausführungsverlauf enthält bis zu 50 der zuletzt abgeschlossenen Ausführungen. Diese sind in umgekehrter chronologischer Reihenfolge sortiert, sodass die neueste Ausführung als Erstes aufgelistet wird.
Indizieren neuer, geänderter und gelöschter Zeilen
Wenn Ihre SQL-Datenbank die Änderungsnachverfolgung unterstützt, kann sich ein Suchindexer bei nachfolgenden Indexerausführungen auf neue und aktualisierte Inhalte beschränken.
Um die inkrementelle Indizierung zu aktivieren, legen Sie die Eigenschaft „dataChangeDetectionPolicy“ in Ihrer Datenquellendefinition fest. Diese Eigenschaft teilt dem Indexer mit, welcher Mechanismus für die Änderungsnachverfolgung für Ihre Tabelle oder Sicht verwendet wird.
Für Azure SQL-Indexer gibt es zwei Richtlinien zur Erkennung von Änderungen:
„SqlIntegratedChangeTrackingPolicy“ (nur für Tabellen)
„HighWaterMarkChangeDetectionPolicy“ (für Sichten)
Integrierte SQL-Richtlinie zur Änderungsnachverfolgung
Aus Effizienzgründen sowie aufgrund der Möglichkeit, gelöschte Zeilen zu erkennen, wird die Verwendung von „SqlIntegratedChangeTrackingPolicy“ empfohlen.
Datenbankanforderungen:
- Azure SQL-Datenbank oder SQL Managed Instance. SQL Server 2016 oder höher, wenn Sie eine Azure-VM verwenden.
- Die Datenbank muss die Änderungsnachverfolgung aktiviert haben.
- Nur Tabellen (keine Ansichten).
- Tabellen können nicht gruppiert werden. Um diese Anforderung zu erfüllen, legen Sie den gruppierten Index ab, und erstellen Sie ihn als nicht gruppierten Index neu. Diese Problemumgehung beeinträchtigt häufig die Leistung. Das Duplizieren von Inhalten in einer zweiten Tabelle, die für die Indizierungsverarbeitung vorgesehen ist, kann eine hilfreiche Gegenmaßnahme sein.
- Tabellen können nicht leer sein. Wenn Sie TRUNCATE TABLE zum Löschen von Zeilen verwenden, werden die entsprechenden Suchdokumente nicht entfernt, selbst wenn der Indexer zurückgesetzt und erneut ausgeführt wird. Um verwaiste Suchdokumente zu entfernen, müssen Sie sie mit einer Löschaktion indizieren.
- Primärschlüssel kann kein zusammengesetzter Schlüssel sein (mit mehr als einer Spalte).
- Der Primärschlüssel muss nicht gruppiert sein, wenn Sie die Löscherkennung benötigen.
Richtlinien zur Änderungserkennung werden Datenquellendefinitionen hinzugefügt. Um diese Richtlinie zu verwenden, bearbeiten Sie die Datenquellendefinition im Azure-Portal, oder verwenden Sie REST, um Ihre Datenquelle wie folgt zu aktualisieren:
POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
{
"name" : "myazuresqldatasource",
"type" : "azuresql",
"credentials" : { "connectionString" : "connection string" },
"container" : { "name" : "table name" },
"dataChangeDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy"
}
}
Geben Sie bei Verwendung einer Richtlinie für die integrierte SQL-Änderungsnachverfolgung keine separate Richtlinie zur Erkennung von Datenlöschungen an. Die Richtlinie für die integrierte SQL-Änderungsnachverfolgung unterstützt die Identifizierung gelöschter Zeilen. Damit die gelöschten Zeilen jedoch automatisch erkannt werden, muss der Dokumentschlüssel in Ihrem Suchindex mit dem Primärschlüssel in der SQL-Tabelle identisch sein, und der Primärschlüssel muss nicht gruppiert sein.
Richtlinie zum Erkennen von Änderungen mit oberem Grenzwert
Diese Richtlinie zur Erkennung von Änderungen basiert auf einer Spalte mit oberem Grenzwert in Ihrer Tabelle oder Sicht, in der die Version oder der Zeitpunkt der letzten Aktualisierung einer Zeile erfasst wird. Bei Verwendung einer Sicht müssen Sie eine Richtlinie mit oberem Grenzwert einsetzen.
Die Spalte mit dem oberen Grenzwert muss die folgenden Anforderungen erfüllen:
- Alle Einfügungen geben einen Wert für die Spalte an.
- Alle Updates für ein Element ändern auch den Wert der Spalte.
- Der Wert dieser Spalte wird bei jeder Einfügung oder Aktualisierung erhöht.
- Abfragen mit den folgenden WHERE- und ORDER BY-Klauseln können effizient ausgeführt werden:
WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]
Hinweis
Es wird dringend empfohlen, den Datentyp rowversion für die Spalte mit dem oberen Grenzwert zu verwenden. Wenn ein anderer Datentyp verwendet wird, ist nicht sichergestellt, dass bei der Änderungsnachverfolgung alle Änderungen erfasst werden, wenn Transaktionen gleichzeitig mit einer Indexerabfrage ausgeführt werden. Bei Verwendung von rowversion in einer Konfiguration mit schreibgeschützten Replikaten müssen Sie den Indexer auf das primäre Replikat verweisen. Nur ein primäres Replikat kann für Szenarien zur Datensynchronisierung verwendet werden.
Richtlinien zur Änderungserkennung werden Datenquellendefinitionen hinzugefügt. Um diese Richtlinie zu verwenden, erstellen oder aktualisieren Sie die Datenquelle wie folgt:
POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
{
"name" : "myazuresqldatasource",
"type" : "azuresql",
"credentials" : { "connectionString" : "connection string" },
"container" : { "name" : "table or view name" },
"dataChangeDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName" : "[a rowversion or last_updated column name]"
}
}
Hinweis
Wenn die Quelltabelle keinen Index für die Spalte mit dem oberen Grenzwert enthält, kann das Zeitlimit für die vom SQL-Indexer verwendeten Abfragen überschritten werden. Insbesondere die Klausel ORDER BY [High Water Mark Column]
erfordert für die effiziente Ausführung einen Index, wenn die Tabelle viele Zeilen enthält.
convertHighWaterMarkToRowVersion
Wenn Sie für die Spalte mit dem oberen Grenzwert den Datentyp rowversion verwenden, empfiehlt es sich gegebenenfalls, in der Indexerkonfiguration die Eigenschaft convertHighWaterMarkToRowVersion
festzulegen. Wenn Sie diese Eigenschaft auf „true“ festlegen, hat dies folgende Auswirkungen:
Für die Spalte mit dem oberen Grenzwert wird der Datentyp „rowversion“ für die SQL-Abfrage des Indexers verwendet. Die Verwendung des richtigen Datentyps verbessert die Abfrageleistung des Indexers.
Vor dem Ausführen der Indexerabfrage wird vom rowversion-Wert die Zahl 1 subtrahiert. Sichten mit 1:n-Joins können Zeilen mit doppelten rowversion-Werten enthalten. Durch Subtraktion von eins wird sichergestellt, dass die Indexerabfrage diese Zeilen nicht übergeht.
Erstellen oder aktualisieren Sie den Indexer mit der folgenden Konfiguration, um diese Eigenschaft zu aktivieren:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "convertHighWaterMarkToRowVersion" : true } }
}
queryTimeout
Sollten Timeoutfehler auftreten, legen Sie die Indexer-Konfigurationseinstellung queryTimeout
auf einen höheren Wert als das Standardtimeout von fünf Minuten fest. Um das Timeout z.B. auf 10 Minuten festzulegen, erstellen oder aktualisieren Sie den Indexer mit der folgenden Konfiguration:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "queryTimeout" : "00:10:00" } }
}
disableOrderByHighWaterMarkColumn
Sie können auch die Klausel ORDER BY [High Water Mark Column]
deaktivieren. Dies wird jedoch nicht empfohlen, da der Indexer im Fall einer fehlerbedingten Unterbrechung der Indexerausführung alle Zeilen erneut verarbeiten muss, wenn er später ausgeführt wird, auch wenn zum Zeitpunkt der Unterbrechung bereits nahezu alle Zeilen verarbeitet wurden. Zum Deaktivieren der Klausel ORDER BY
verwenden Sie die Einstellung disableOrderByHighWaterMarkColumn
in der Indexer-Definition:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
}
Richtlinie zum Erkennen von Löschungen anhand der Spalte „Vorläufig löschen“
Wenn Zeilen aus der Quelltabelle gelöscht werden, sollten Sie diese Zeilen auch aus dem Suchindex löschen. Wenn Sie die Richtlinie für die integrierte SQL-Änderungsnachverfolgung verwenden, müssen Sie sich nicht darum kümmern, weil es automatisch geschieht. Die Richtlinie zum Erkennen von Änderungen mit oberem Grenzwert hilft Ihnen allerdings nicht beim Löschen von Zeilen. Vorgehensweise
Wenn Zeilen physisch aus der Tabelle entfernt werden, gibt es in Azure KI-Suche keine Möglichkeit, das Vorhandensein von Datensätzen, die nicht mehr vorhanden sind, abzuleiten. Mit der Methode des „vorläufigen Löschens“ können Sie jedoch Zeilen logisch löschen, ohne sie aus der Tabelle zu entfernen. Fügen Sie dazu der Tabelle eine Spalte hinzu, um Zeilen unter Verwendung dieser Spalte anzuzeigen und als gelöscht zu markieren.
Wenn Sie die Methode des "vorläufigen Löschens" verwenden, können Sie die Richtlinie zum Erkennen von Löschungen anhand der "Vorläufig löschen"-Spalte wie folgt beim Erstellen oder Aktualisieren der Datenquelle angeben:
{
…,
"dataDeletionDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName" : "[a column name]",
"softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
}
}
softDeleteMarkerValue muss eine Zeichenfolge in der JSON-Darstellung Ihrer Datenquelle sein. Verwenden Sie die Zeichenfolgendarstellung Ihres tatsächlichen Werts. Wenn Sie z.B. über eine „integer“-Spalte verfügen, in der gelöschte Zeilen durch den Wert 1 gekennzeichnet sind, verwenden Sie "1"
. Wenn Sie über eine BIT-Spalte verfügen, in der gelöschte Zeilen durch den booleschen Wert TRUE gekennzeichnet sind, verwenden Sie das Zeichenfolgenliteral "True"
oder "true"
(die Groß- und Kleinschreibung spielt keine Rolle).
Wenn Sie eine Richtlinie für das vorläufige Löschen über das Azure-Portal einrichten, fügen Sie keine Anführungszeichen um den Markerwert für das vorläufige Löschen hinzu. Der Feldinhalt wird bereits als Zeichenfolge verstanden und automatisch in eine JSON-Zeichenfolge übersetzt. Geben Sie in den oben gezeigten Beispielen einfach 1
, True
oder true
in das Feld im Azure-Portal ein.
Häufig gestellte Fragen
F: Kann ich Always Encrypted-Spalten indizieren?
Nein, Always Encrypted-Spalten werden derzeit nicht von Azure KI-Suche-Indexern unterstützt.
F: Kann ich Azure SQL-Indexer mit SQL-Datenbanken verwenden, die auf IaaS-VMs in Azure ausgeführt werden?
Ja. Sie müssen jedoch die Verbindung des Suchdiensts mit der Datenbank ermöglichen. Weitere Informationen finden Sie im Artikel Konfigurieren einer Verbindung eines Azure KI-Suche-Indexern mit SQL Server auf einer Azure-VM.
F: Kann ich Azure SQL-Indexer mit SQL-Datenbanken verwenden, die lokal ausgeführt werden?
Nicht direkt. Weder empfehlen noch unterstützen wir eine direkte Verbindung, da Sie die Datenbanken dann für den Internetdatenverkehr öffnen müssten. Kunden waren bei diesem Szenario mit Brückentechnologien wie Azure Data Factory erfolgreich. Weitere Informationen finden Sie unter Push-Übertragung von Daten in den Azure KI-Suche-Index mithilfe von Azure Data Factory.
F: Kann ich ein sekundäres Replikat in einem Failovercluster als Datenquelle verwenden?
Das ist unterschiedlich. Für die vollständige Indizierung einer Tabelle oder Sicht können Sie ein sekundäres Replikat verwenden.
Für eine inkrementelle Indizierung unterstützt Azure KI-Suche zwei Richtlinien zur Erkennung von Änderungen: integrierte SQL-Änderungsnachverfolgung und oberer Grenzwert.
Bei schreibgeschützten Replikaten wird die integrierte Änderungsnachverfolgung von SQL-Datenbank nicht unterstützt. Aus diesem Grund müssen Sie die Richtlinie mit oberem Grenzwert verwenden.
Unsere Standardempfehlung ist den Datentyp „rowversion“ für die Spalte mit dem oberen Grenzwert zu verwenden. Allerdings muss für „rowversion“ die Funktion MIN_ACTIVE_ROWVERSION
verwendet werden, die für schreibgeschützte Replikate nicht unterstützt wird. Aus diesem Grund muss der Indexer auf ein primäres Replikat verwiesen werden, wenn Sie „rowversion“ verwenden.
Wenn Sie versuchen, „rowversion“ bei einem schreibgeschützten Replikat zu verwenden, wird die folgende Fehlermeldung angezeigt:
„Die Verwendung einer rowversion-Spalte für die Änderungsnachverfolgung wird für sekundäre (schreibgeschützte) Verfügbarkeitsreplikate nicht unterstützt. Aktualisieren Sie die Datenquelle, und geben Sie eine Verbindung zum primären Verfügbarkeitsreplikat an. Die Datenbankeigenschaft „Updateability“ ist derzeit auf READ_ONLY festgelegt.“
F: Kann ich eine alternative Spalte mit einem anderen Typ als „rowversion“ für die Änderungsnachverfolgung mit oberem Grenzwert verwenden?
Dies ist nicht empfehlenswert. Nur rowversion ermöglicht eine zuverlässige Datensynchronisierung. Je nach Anwendungslogik kann es jedoch möglicherweise in folgendem Fall machbar sein:
Sie können sicherstellen, dass bei der Ausführung des Indexers keine ausstehenden Transaktionen für die Tabelle vorhanden sind, die indiziert wird (z. B. alle Tabellenaktualisierungen werden als ein Batch nach einem Zeitplan ausgeführt, und der Zeitplan des Azure KI-Suche-Indexers ist so festgelegt, dass er sich nicht mit dem Zeitplan der Tabellenaktualisierung überschneidet).
Sie führen in regelmäßigen Abständen eine vollständige erneute Indizierung aus, damit alle fehlenden Zeilen übernommen werden.