Udostępnij za pośrednictwem


Indeksowanie danych z usługi Azure SQL Database

Z tego artykułu dowiesz się, jak skonfigurować indeksator , który importuje zawartość z usługi Azure SQL Database lub wystąpienia zarządzanego usługi Azure SQL i umożliwia wyszukiwanie w usłudze Azure AI Search.

Ten artykuł uzupełnia tworzenie indeksatora z informacjami specyficznymi dla usługi Azure SQL. Używa ona witryny Azure Portal i interfejsów API REST, aby zademonstrować trzyczęściowy przepływ pracy wspólny dla wszystkich indeksatorów: tworzenie źródła danych, tworzenie indeksu, tworzenie indeksatora. Wyodrębnianie danych odbywa się podczas przesyłania żądania Tworzenia indeksatora.

Ten artykuł zawiera również następujące elementy:

  • Opis zasad wykrywania zmian obsługiwanych przez indeksator usługi Azure SQL, dzięki czemu można skonfigurować indeksowanie przyrostowe.

  • Sekcja często zadawanych pytań (FAQ) zawierająca odpowiedzi na pytania dotyczące zgodności funkcji.

Uwaga

Synchronizacja danych w czasie rzeczywistym nie jest możliwa w przypadku indeksatora. Indeksator może ponownie indeksować tabelę co najwyżej pięć minut. Jeśli aktualizacje danych muszą zostać odzwierciedlone w indeksie wcześniej, zalecamy bezpośrednie wypychanie zaktualizowanych wierszy.

Wymagania wstępne

  • Baza danych Azure SQL Database z danymi w jednej tabeli lub widoku albo wystąpienie zarządzane SQL z publicznym punktem końcowym.

    Użyj tabeli, jeśli dane są duże lub jeśli potrzebujesz indeksowania przyrostowego przy użyciu natywnych możliwości wykrywania zmian w programie SQL.

    Użyj widoku, jeśli chcesz skonsolidować dane z wielu tabel. Duże widoki nie są idealne dla indeksatora SQL. Obejściem jest utworzenie nowej tabeli tylko na potrzeby pozyskiwania danych do indeksu usługi Azure AI Search. Zintegrowane śledzenie zmian SQL umożliwia śledzenie nowych i zmienionych wierszy, co jest łatwiejsze do zaimplementowania niż znacznik wysokiej wody.

  • Uprawnienia do odczytu. Usługa Azure AI Search obsługuje uwierzytelnianie programu SQL Server, gdzie w parametry połączenia podano nazwę użytkownika i hasło. Alternatywnie można skonfigurować tożsamość zarządzaną i używać ról platformy Azure.

Aby pracować z przykładami w tym artykule, potrzebujesz witryny Azure Portal lub klienta REST. Jeśli używasz witryny Azure Portal, upewnij się, że dostęp do wszystkich sieci publicznych jest włączony w zaporze Azure SQL Firewall i że klient ma dostęp za pośrednictwem reguły ruchu przychodzącego. W przypadku klienta REST, który działa lokalnie, skonfiguruj zaporę programu SQL Server, aby zezwolić na dostęp przychodzący z adresu IP urządzenia. Inne podejścia do tworzenia indeksatora usługi Azure SQL obejmują zestawy AZURE SDK.

Wypróbuj przykładowe dane

Skorzystaj z tych instrukcji, aby utworzyć i załadować tabelę w usłudze Azure SQL Database do celów testowych.

  1. Pobierz hotels-azure-sql.sql z usługi GitHub, aby utworzyć tabelę w usłudze Azure SQL Database zawierającą podzbiór przykładowych zestawów danych hoteli.

  2. Zaloguj się do witryny Azure Portal i utwórz bazę danych Azure SQL Database i serwer bazy danych. Rozważ skonfigurowanie zarówno uwierzytelniania programu SQL Server, jak i uwierzytelniania identyfikatora entra firmy Microsoft. Jeśli nie masz uprawnień do konfigurowania ról na platformie Azure, możesz użyć uwierzytelniania SQL jako obejścia.

  3. Skonfiguruj zaporę serwera do wszystkich żądań przychodzących z urządzenia lokalnego.

  4. W bazie danych Azure SQL Database wybierz pozycję Edytor zapytań (wersja zapoznawcza), a następnie wybierz pozycję Nowe zapytanie.

  5. Wklej polecenie , a następnie uruchom skrypt języka T-SQL, który tworzy tabelę hotels.

    CREATE TABLE tbl_hotels
     (
         Id TINYINT PRIMARY KEY,
         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)
     );
    
  6. Wklej polecenie , a następnie uruchom skrypt języka T-SQL, który wstawia rekordy.

     -- 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.');
    
    
  7. Uruchom zapytanie, aby potwierdzić przekazanie.

    SELECT Description FROM tbl_hotels;
    

Powinny zostać wyświetlone wyniki podobne do poniższego zrzutu ekranu.

Zrzut ekranu przedstawiający wyniki zapytania z polem opisu.

Pole Opis zawiera najbardziej szczegółową zawartość. To pole powinno być przeznaczone dla wyszukiwania pełnotekstowego i wektoryzacji opcjonalnej.

Teraz, gdy masz tabelę bazy danych, możesz za pomocą witryny Azure Portal, klienta REST lub zestawu Azure SDK indeksować dane.

Napiwek

Inny zasób, który udostępnia przykładową zawartość i kod, można znaleźć na stronie Azure-Samples/SQL-AI-samples.

Korzystanie z witryny Azure Portal

Możesz użyć Kreatora importu danych lub Kreatora importowania i wektoryzacji danych, aby zautomatyzować indeksowanie z tabeli lub widoku bazy danych SQL. Konfiguracja źródła danych jest podobna dla obu kreatorów.

  1. Uruchom kreator.

  2. Na stronie Połącz z danymi wybierz lub sprawdź, czy typ źródła danych to Azure SQL Database lub SQL Database.

    Nazwa źródła danych odnosi się do obiektu połączenia źródła danych w usłudze Azure AI Search. Jeśli używasz kreatora wektorów, nazwa źródła danych jest generowana automatycznie przy użyciu niestandardowego prefiksu określonego na końcu przepływu pracy kreatora.

  3. Określ nazwę serwera, nazwę bazy danych i nazwę tabeli lub widoku.

    Portal weryfikuje połączenie. Jeśli baza danych jest wstrzymana z powodu braku aktywności, przejdź do strony serwera bazy danych i upewnij się, że stan bazy danych jest w trybie online. Aby aktywować bazę danych, możesz uruchomić zapytanie w dowolnej tabeli.

    Zrzut ekranu przedstawiający stronę stanu bazy danych w witrynie Azure Portal.

  4. Określ metodę uwierzytelniania , identyfikator logowania programu SQL Server zdefiniowany podczas instalacji serwera lub tożsamość zarządzaną.

    Jeśli skonfigurujesz usługę Azure AI Search do korzystania z tożsamości zarządzanej i utworzysz przypisanie roli na serwerze bazy danych, który udziela uprawnień współautora programu SQL Server lub współautora bazy danych programu SQL Server do tożsamości, indeksator może nawiązać połączenie z usługą Azure SQL przy użyciu identyfikatora i ról firmy Microsoft Entra.

  5. W przypadku kreatora Importowanie i wektoryzowanie danych można określić opcje śledzenia zmian i usuwania.

  6. Przejdź do pozostałych kroków, aby ukończyć pracę kreatora:

Korzystanie z interfejsów API REST

W tej sekcji przedstawiono wywołania interfejsu API REST, które tworzą źródło danych, indeks i indeksator.

Definiowanie źródła danych

Definicja źródła danych określa dane do indeksowania, poświadczeń i zasad identyfikowania zmian w danych. Źródło danych jest definiowane jako niezależny zasób, dzięki czemu może być używane przez wiele indeksatorów.

  1. Utwórz źródło danych lub utwórz lub zaktualizuj źródło danych, aby ustawić jego definicję:

     POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
     Content-Type: application/json
     api-key: admin-key
    
     {
         "name" : "myazuresqldatasource",
         "description" : "A database for testing Azure AI Search indexes.",
         "type" : "azuresql",
         "credentials" : { "connectionString" : "Server=tcp:<your server>.database.windows.net,1433;Database=<your database>;User ID=<your user name>;Password=<your password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },
         "container" : { 
             "name" : "name of the table or view that you want to index",
             "query" : null (not supported in the Azure SQL indexer)
             },
         "dataChangeDetectionPolicy": null,
         "dataDeletionDetectionPolicy": null,
         "encryptionKey": null,
         "identity": null
     }
    
  2. Podaj unikatową nazwę źródła danych, która jest zgodna z konwencjami nazewnictwa usługi Azure AI Search.

  3. Ustaw wartość "type" na "azuresql" (wymagane).

  4. Ustaw wartość "credentials" na parametry połączenia:

    • Pełny dostęp parametry połączenia można uzyskać w witrynie Azure Portal. ADO.NET connection string Użyj opcji . Ustaw nazwę użytkownika i hasło.

    • Alternatywnie można określić tożsamość zarządzaną parametry połączenia, która nie zawiera wpisów tajnych bazy danych o następującym formacie: Initial Catalog|Database=<your database name>;ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Sql/servers/<your SQL Server name>/;Connection Timeout=connection timeout length;.

    Aby uzyskać więcej informacji, zobacz Connect to Azure SQL Database indexer using a managed identity (Nawiązywanie połączenia z indeksatorem usługi Azure SQL Database przy użyciu tożsamości zarządzanej).

Dodawanie pól wyszukiwania do indeksu

W indeksie wyszukiwania dodaj pola, które odpowiadają polam w bazie danych SQL. Upewnij się, że schemat indeksu wyszukiwania jest zgodny ze schematem źródłowym przy użyciu równoważnych typów danych.

  1. Utwórz lub zaktualizuj indeks , aby zdefiniować pola wyszukiwania, które przechowują dane:

    POST https://[service name].search.windows.net/indexes?api-version=2024-07-01
    Content-Type: application/json
    api-key: [Search service admin key]
    {
        "name": "mysearchindex",
        "fields": [{
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "searchable": false
        }, 
        {
            "name": "description",
            "type": "Edm.String",
            "filterable": false,
            "searchable": true,
            "sortable": false,
            "facetable": false,
            "suggestions": true
        }
      ]
    }
    
  2. Utwórz pole klucza dokumentu ("key": true), które jednoznacznie identyfikuje każdy dokument wyszukiwania. Jest to jedyne pole, które jest wymagane w indeksie wyszukiwania. Zazwyczaj klucz podstawowy tabeli jest mapowany na pole klucza indeksu. Klucz dokumentu musi być unikatowy i inny niż null. Wartości mogą być liczbowe w danych źródłowych, ale w indeksie wyszukiwania klucz jest zawsze ciągiem.

  3. Utwórz więcej pól, aby dodać więcej zawartości z możliwością wyszukiwania. Aby uzyskać wskazówki, zobacz Tworzenie indeksu .

Mapowanie typów danych

Typ danych SQL Typy pól usługi Azure AI Search Uwagi
bitowe Edm.Boolean, Edm.String
int, smallint, tinyint Edm.Int32, Edm.Int64, Edm.String
bigint Edm.Int64, Edm.String
rzeczywiste, zmiennoprzecinkowe Edm.Double, Edm.String
smallmoney, liczba dziesiętna pieniędzy Edm.String Usługa Azure AI Search nie obsługuje konwertowania typów dziesiętnych na Edm.Double , ponieważ spowoduje to utratę precyzji
char, nchar, varchar, nvarchar Edm.String
Collection(Edm.String)
Ciąg SQL może służyć do wypełniania pola Collection(Edm.String), jeśli ciąg reprezentuje tablicę ciągów JSON: ["red", "white", "blue"]
smalldatetime, datetime, datetime2, date, datetimeoffset Edm.DateTimeOffset, Edm.String
uniqueidentifer Edm.String
obszary geograficzne Edm.GeographyPoint Obsługiwane są tylko wystąpienia geograficzne typu POINT ze SRID 4326 (co jest wartością domyślną)
rowversion Nie dotyczy Kolumny wersji wiersza nie mogą być przechowywane w indeksie wyszukiwania, ale mogą być używane do śledzenia zmian
time, timespan, binary, varbinary, image, xml, geometry, CLR types Nie dotyczy Nieobsługiwane

Konfigurowanie i uruchamianie indeksatora usługi Azure SQL

Po utworzeniu indeksu i źródła danych możesz utworzyć indeksator. Konfiguracja indeksatora określa dane wejściowe, parametry i właściwości kontrolujące zachowania czasu wykonywania.

  1. Utwórz lub zaktualizuj indeksator , podając mu nazwę i odwołując się do źródła danych i indeksu docelowego:

    POST https://[service name].search.windows.net/indexers?api-version=2024-07-01
    Content-Type: application/json
    api-key: [search service admin key]
    {
        "name" : "[my-sqldb-indexer]",
        "dataSourceName" : "[my-sqldb-ds]",
        "targetIndexName" : "[my-search-index]",
        "disabled": null,
        "schedule": null,
        "parameters": {
            "batchSize": null,
            "maxFailedItems": 0,
            "maxFailedItemsPerBatch": 0,
            "base64EncodeKeys": false,
            "configuration": {
                "queryTimeout": "00:04:00",
                "convertHighWaterMarkToRowVersion": false,
                "disableOrderByHighWaterMarkColumn": false
            }
        },
        "fieldMappings": [],
        "encryptionKey": null
    }
    
  2. W obszarze parametry sekcja konfiguracji zawiera parametry specyficzne dla usługi Azure SQL:

    • Domyślny limit czasu zapytania dla wykonywania zapytania SQL wynosi 5 minut, co można zastąpić.

    • Wyrażenie "convertHighWaterMarkToRowVersion" optymalizuje zasady wykrywania zmian znacznika górnego limitu wody. Zasady wykrywania zmian są ustawiane w źródle danych. Jeśli używasz zasad wykrywania zmian natywnych, ten parametr nie ma efektu.

    • Polecenie "disableOrderByHighWaterMarkColumn" powoduje, że zapytanie SQL używane przez zasady wysokiego znaku wodnego pomija klauzulę ORDER BY. Jeśli używasz zasad wykrywania zmian natywnych, ten parametr nie ma efektu.

  3. Określ mapowania pól, jeśli istnieją różnice w nazwie lub typie pola lub jeśli potrzebujesz wielu wersji pola źródłowego w indeksie wyszukiwania.

  4. Aby uzyskać więcej informacji na temat innych właściwości, zobacz Tworzenie indeksatora .

Indeksator jest uruchamiany automatycznie po jego utworzeniu. Możesz temu zapobiec, ustawiając wartość "disabled" na true. Aby kontrolować wykonywanie indeksatora, uruchom indeksator na żądanie lub umieść go zgodnie z harmonogramem.

Sprawdzanie stanu indeksatora

Aby monitorować stan indeksatora i historię wykonywania, sprawdź historię wykonywania indeksatora w witrynie Azure Portal lub wyślij interfejs API REST Get Indexer Status REST

  1. Na stronie usługi wyszukiwania otwórz pozycję Indeksatory zarządzania wyszukiwaniem>.

  2. Wybierz indeksator, aby uzyskać dostęp do konfiguracji i historii wykonywania.

  3. Wybierz określone zadanie indeksatora, aby wyświetlić szczegóły, ostrzeżenia i błędy.

Historia wykonywania zawiera do 50 ostatnio wykonanych wykonań, które są sortowane w odwrotnej kolejności chronologicznej, tak aby najnowsze wykonanie było wykonywane jako pierwsze.

Indeksowanie nowych, zmienionych i usuniętych wierszy

Jeśli baza danych SQL obsługuje śledzenie zmian, indeksator wyszukiwania może pobrać tylko nową i zaktualizowaną zawartość na kolejnych uruchomieniach indeksatora.

Aby włączyć indeksowanie przyrostowe, ustaw właściwość "dataChangeDetectionPolicy" w definicji źródła danych. Ta właściwość informuje indeksator, który mechanizm śledzenia zmian jest używany w tabeli lub widoku.

W przypadku indeksatorów usługi Azure SQL istnieją dwie zasady wykrywania zmian:

  • "SqlIntegratedChangeTrackingPolicy" (dotyczy tylko tabel)

  • "HighWaterMarkChangeDetectionPolicy" (działa w przypadku tabel i widoków)

Zintegrowane zasady śledzenia zmian SQL

Zalecamy użycie wartości "SqlIntegratedChangeTrackingPolicy" pod kątem wydajności i możliwości identyfikowania usuniętych wierszy.

Wymagania dotyczące bazy danych:

  • Program SQL Server 2012 SP3 lub nowsza wersja, jeśli używasz programu SQL Server na maszynach wirtualnych platformy Azure
  • Usługa Azure SQL Database lub wystąpienie zarządzane SQL
  • Tylko tabele (bez widoków)
  • W bazie danych włącz śledzenie zmian dla tabeli
  • Brak złożonego klucza podstawowego (klucz podstawowy zawierający więcej niż jedną kolumnę) w tabeli
  • Brak indeksów klastrowanych w tabeli. Obejście tego problemu wymagałoby usunięcia i ponownego utworzenia indeksu klastrowanego jako indeksu nieklastrowanego, jednak może to mieć wpływ na wydajność w źródle w porównaniu z indeksem klastrowanym

Zasady wykrywania zmian są dodawane do definicji źródła danych. Aby użyć tych zasad, utwórz lub zaktualizuj źródło danych w następujący sposób:

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

W przypadku korzystania z zintegrowanych zasad śledzenia zmian SQL nie należy określać oddzielnych zasad wykrywania usuwania danych. Zintegrowane zasady śledzenia zmian SQL mają wbudowaną obsługę identyfikowania usuniętych wierszy. Jednak aby usunięte wiersze zostały wykryte automatycznie, klucz dokumentu w indeksie wyszukiwania musi być taki sam jak klucz podstawowy w tabeli SQL.

Uwaga

W przypadku usuwania dużej liczby wierszy z tabeli SQL przy użyciu narzędzia TRUNCATE , indeksator musi zostać zresetowany , aby zresetować stan śledzenia zmian w celu pobrania usunięcia wierszy.

Zasady wykrywania zmian znacznika górnego limitu wody

Te zasady wykrywania zmian opierają się na kolumnie "wysoki znacznik wody" w tabeli lub widoku, który przechwytuje wersję lub godzinę ostatniej aktualizacji wiersza. Jeśli używasz widoku, musisz użyć zasad wysokiego znaku wodnego.

Kolumna wysokiego limitu wody musi spełniać następujące wymagania:

  • Wszystkie wstawki określają wartość kolumny.
  • Wszystkie aktualizacje elementu również zmieniają wartość kolumny.
  • Wartość tej kolumny jest zwiększana przy każdym wstawieniu lub aktualizacji.
  • Zapytania z następującymi klauzulami WHERE i ORDER BY można wykonywać wydajnie: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

Uwaga

Zdecydowanie zalecamy użycie typu danych rowversion dla kolumny wysokiego limitu wody. Jeśli jest używany jakikolwiek inny typ danych, śledzenie zmian nie gwarantuje przechwycenia wszystkich zmian w obecności transakcji wykonywanych współbieżnie za pomocą zapytania indeksatora. W przypadku używania elementu rowversion w konfiguracji z replikami tylko do odczytu należy wskazać indeksator w repliki podstawowej. Tylko replika podstawowa może służyć do scenariuszy synchronizacji danych.

Zasady wykrywania zmian są dodawane do definicji źródła danych. Aby użyć tych zasad, utwórz lub zaktualizuj źródło danych w następujący sposób:

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

Uwaga

Jeśli tabela źródłowa nie ma indeksu w kolumnie wysokiego znacznika wody, zapytania używane przez indeksator SQL mogą przekraczać limit czasu. W szczególności klauzula ORDER BY [High Water Mark Column] wymaga wydajnego uruchomienia indeksu, gdy tabela zawiera wiele wierszy.

convertHighWaterMarkToRowVersion

Jeśli używasz typu danych rowversion dla kolumny wysokiego limitu wody, rozważ ustawienie convertHighWaterMarkToRowVersion właściwości w konfiguracji indeksatora. Ustawienie tej właściwości na true powoduje następujące zachowania:

  • Używa typu danych rowversion dla kolumny wysokiego limitu wody w zapytaniu SQL indeksatora. Użycie poprawnego typu danych zwiększa wydajność zapytań indeksatora.

  • Odejmuje jedną z wartości rowversion przed uruchomieniem zapytania indeksatora. Widoki ze sprzężeniami jeden do wielu mogą zawierać wiersze ze zduplikowanymi wartościami rowversion. Odejmowanie jednego gwarantuje, że zapytanie indeksatora nie przegapi tych wierszy.

Aby włączyć tę właściwość, utwórz lub zaktualizuj indeksator przy użyciu następującej konfiguracji:

    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "convertHighWaterMarkToRowVersion" : true } }
    }

queryTimeout

Jeśli wystąpią błędy przekroczenia limitu czasu, ustaw queryTimeout ustawienie konfiguracji indeksatora na wartość wyższą niż domyślny limit czasu 5-minutowy. Aby na przykład ustawić limit czasu na 10 minut, utwórz lub zaktualizuj indeksator przy użyciu następującej konfiguracji:

    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "queryTimeout" : "00:10:00" } }
    }

disableOrderByHighWaterMarkColumn

Możesz również wyłączyć klauzulę ORDER BY [High Water Mark Column] . Nie jest to jednak zalecane, ponieważ jeśli wykonanie indeksatora zostanie przerwane przez błąd, indeksator musi ponownie przetworzyć wszystkie wiersze, jeśli zostanie uruchomiony później, nawet jeśli indeksator przetworzył już prawie wszystkie wiersze w czasie przerwania. Aby wyłączyć klauzulę ORDER BY disableOrderByHighWaterMarkColumn , użyj ustawienia w definicji indeksatora:

    {
     ... other indexer definition properties
     "parameters" : {
            "configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
    }

Zasady wykrywania usuwania kolumn nietrwałych

Po usunięciu wierszy z tabeli źródłowej prawdopodobnie chcesz również usunąć te wiersze z indeksu wyszukiwania. Jeśli używasz zintegrowanych zasad śledzenia zmian SQL, jest to dla Ciebie potrzebne. Jednak zasady śledzenia zmian z wysokim znacznikiem wody nie ułatwiają usuwania wierszy. Postępowanie

Jeśli wiersze są fizycznie usuwane z tabeli, usługa Azure AI Search nie ma możliwości wnioskowania o obecności rekordów, które już nie istnieją. Można jednak użyć techniki "usuwania nietrwałego", aby logicznie usunąć wiersze bez usuwania ich z tabeli. Dodaj kolumnę do tabeli lub widoku i oznacz wiersze jako usunięte przy użyciu tej kolumny.

W przypadku korzystania z techniki usuwania nietrwałego można określić zasady usuwania nietrwałego w następujący sposób podczas tworzenia lub aktualizowania źródła danych:

    {
        …,
        "dataDeletionDetectionPolicy" : {
           "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
           "softDeleteColumnName" : "[a column name]",
           "softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
        }
    }

SoftDeleteMarkerValue musi być ciągiem w reprezentacji JSON źródła danych. Użyj reprezentacji ciągu rzeczywistej wartości. Jeśli na przykład masz kolumnę całkowitą, w której usunięte wiersze są oznaczone wartością 1, użyj wartości "1". Jeśli masz kolumnę BIT, w której usunięte wiersze są oznaczone wartością true wartości logicznej, użyj literału "True" ciągu lub "true", wielkość liter nie ma znaczenia.

Jeśli konfigurujesz zasady usuwania nietrwałego z witryny Azure Portal, nie dodawaj cudzysłowów wokół wartości znacznika usuwania nietrwałego. Zawartość pola jest już rozumiana jako ciąg i jest tłumaczona automatycznie na ciąg JSON. W poprzednich przykładach po prostu wpisz 1, True lub true w polu portalu.

Często zadawane pytania

.: Czy mogę indeksować kolumny Always Encrypted?

Nie, kolumny Always Encrypted nie są obecnie obsługiwane przez indeksatory usługi Azure AI Search.

.: Czy mogę używać indeksatora Azure SQL z bazami danych SQL działającymi na maszynach wirtualnych IaaS na platformie Azure?

Tak. Należy jednak zezwolić usłudze wyszukiwania na łączenie się z bazą danych. Aby uzyskać więcej informacji, zobacz Konfigurowanie połączenia z indeksatora usługi Azure AI Search do programu SQL Server na maszynie wirtualnej platformy Azure.

.: Czy mogę używać indeksatora Azure SQL z bazami danych SQL działającymi lokalnie?

Nie bezpośrednio. Nie zalecamy ani nie obsługujemy bezpośredniego połączenia, ponieważ wymaga to otwarcia baz danych na ruch internetowy. Klienci odnieśli sukces w tym scenariuszu przy użyciu technologii mostka, takich jak Azure Data Factory. Aby uzyskać więcej informacji, zobacz Wypychanie danych do indeksu usługi Azure AI Search przy użyciu usługi Azure Data Factory.

.: Czy mogę użyć repliki pomocniczej w klastrze trybu failover jako źródła danych?

To zależy. Aby uzyskać pełne indeksowanie tabeli lub widoku, można użyć repliki pomocniczej.

W przypadku indeksowania przyrostowego usługa Azure AI Search obsługuje dwie zasady wykrywania zmian: zintegrowane śledzenie zmian SQL i wysoki znak wodny.

W replikach tylko do odczytu usługa SQL Database nie obsługuje zintegrowanego śledzenia zmian. W związku z tym należy użyć zasad High Water Mark.

Naszym standardowym zaleceniem jest użycie typu danych rowversion dla kolumny wysokiego limitu wody. Jednak użycie funkcji rowversion opiera się na MIN_ACTIVE_ROWVERSION funkcji, która nie jest obsługiwana w replikach tylko do odczytu. W związku z tym należy wskazać indeksator do repliki podstawowej, jeśli używasz funkcji rowversion.

Jeśli próbujesz użyć elementu rowversion w repliki tylko do odczytu, wystąpi następujący błąd:

"Używanie kolumny rowversion do śledzenia zmian nie jest obsługiwane w pomocniczych replikach dostępności (tylko do odczytu). Zaktualizuj źródło danych i określ połączenie z repliką dostępności podstawowej. Bieżąca właściwość "Updateability" bazy danych to "READ_ONLY".

.: Czy mogę użyć alternatywnej kolumny innej niż rowversion na potrzeby śledzenia zmian znacznika górnego limitu wody?

Nie jest to zalecane. Tylko wersja wiersza umożliwia niezawodną synchronizację danych. Jednak w zależności od logiki aplikacji może to być bezpieczne, jeśli:

  • Możesz upewnić się, że po uruchomieniu indeksatora nie ma zaległych transakcji w tabeli indeksowanej (na przykład wszystkie aktualizacje tabel są wykonywane jako partia zgodnie z harmonogramem, a harmonogram indeksatora usługi Azure AI Search jest ustawiony, aby uniknąć nakładania się na harmonogram aktualizacji tabeli).

  • Okresowo wykonujesz pełne ponowne indeksowanie, aby odebrać wszystkie pominięte wiersze.