Indeksowanie danych z elastycznego serwera usługi Azure Database for MySQL

Ważne

Obsługa programu MySQL jest obecnie dostępna w publicznej wersji zapoznawczej w obszarze Uzupełniające warunki użytkowania. Indeksowanie zawartości przy użyciu interfejsu API REST w wersji zapoznawczej (2020-06-30-preview lub nowszego). Obecnie nie ma obsługi portalu.

Z tego artykułu dowiesz się, jak skonfigurować indeksator , który importuje zawartość z usługi Azure Database for MySQL i umożliwia wyszukiwanie w usłudze Azure AI Search. Dane wejściowe indeksatora to wiersz w jednej tabeli lub widoku. Dane wyjściowe to indeks wyszukiwania z zawartością z możliwością wyszukiwania w poszczególnych polach.

Ten artykuł uzupełnia tworzenie indeksatora z informacjami specyficznymi dla indeksowania z serwera elastycznego usługi Azure Database for MySQL. Używa ona 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.

Po skonfigurowaniu do uwzględnienia wysokiego znaku wodnego i usuwania nietrwałego indeksator pobiera wszystkie zmiany, przekazuje i usuwa bazę danych MySQL. Odzwierciedla te zmiany w indeksie wyszukiwania. Wyodrębnianie danych odbywa się podczas przesyłania żądania Tworzenia indeksatora.

Wymagania wstępne

  • Zarejestruj się, aby uzyskać informacje o wersji zapoznawczej , aby przekazać opinię na temat scenariusza. Dostęp do funkcji można uzyskać automatycznie po przesłaniu formularza.

  • Azure Database for MySQL — elastyczny serwer i przykładowe dane. Dane muszą znajdować się w tabeli lub widoku. Wymagany jest klucz podstawowy. Jeśli używasz widoku, musi mieć kolumnę z wysokim znacznikiem wody.

  • Uprawnienia do odczytu. Pełny dostęp parametry połączenia zawiera klucz, który udziela dostępu do zawartości, ale jeśli używasz ról platformy Azure, upewnij się, że tożsamość zarządzana usługi wyszukiwania ma uprawnienia Czytelnik w programie MySQL.

  • Klient REST do tworzenia źródła danych, indeksu i indeksatora.

    Możesz również użyć zestawu Azure SDK dla platformy .NET. Nie można użyć portalu do tworzenia indeksatora, ale możesz zarządzać indeksatorami i źródłami danych po ich utworzeniu.

Ograniczenia wersji zapoznawczej

Obecnie wykrywanie śledzenia zmian i usuwania nie działa, jeśli data lub znacznik czasu jest jednolity dla wszystkich wierszy. To ograniczenie jest znanym problemem, który można rozwiązać w aktualizacji wersji zapoznawczej. Dopóki ten problem nie zostanie rozwiązany, nie dodasz zestawu umiejętności do indeksatora MySQL.

Wersja zapoznawcza nie obsługuje typów geometrii i obiektów blob.

Jak wspomniano, nie ma obsługi portalu tworzenia indeksatora, ale indeksator MySQL i źródło danych mogą być zarządzane w portalu po ich utworzeniu. Można na przykład edytować definicje i resetować, uruchamiać lub planować 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.

Ustawienie Utwórz lub Zaktualizuj źródło danych określa definicję. Podczas tworzenia źródła danych pamiętaj, aby użyć wersji zapoznawczej interfejsu API REST (2020-06-30-Preview lub nowszej).

{   
    "name" : "hotel-mysql-ds",
    "description" : "[Description of MySQL data source]",
    "type" : "mysql",
    "credentials" : { 
        "connectionString" : 
            "Server=[MySQLServerName].MySQL.database.azure.com; Port=3306; Database=[DatabaseName]; Uid=[UserName]; Pwd=[Password]; SslMode=Preferred;" 
    },
    "container" : { 
        "name" : "[TableName]" 
    },
    "dataChangeDetectionPolicy" : { 
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "[HighWaterMarkColumn]"
    }
}

Kluczowe punkty:

  • Ustaw type wartość "mysql" (wymagane).

  • Ustaw credentials wartość ADO.NET parametry połączenia. Parametry połączenia można znaleźć w witrynie Azure Portal na stronie ciągów Połączenie ion dla programu MySQL.

  • Ustaw container nazwę tabeli.

  • Ustaw dataChangeDetectionPolicy , czy dane są nietrwałe i chcesz, aby indeksator pobierał tylko nowe i zaktualizowane elementy w kolejnych uruchomieniach.

  • Ustaw dataDeletionDetectionPolicy , jeśli chcesz usunąć dokumenty wyszukiwania z indeksu wyszukiwania po usunięciu elementu źródłowego.

Tworzenie indeksu

Tworzenie lub aktualizowanie indeksu określa schemat indeksu:

{
    "name" : "hotels-mysql-ix",
    "fields": [
        { "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false },
        { "name": "Category", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true  },
        { "name": "City", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },
        { "name": "Description", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false  }     
    ]
}

Jeśli klucz podstawowy w tabeli źródłowej jest zgodny z kluczem dokumentu (w tym przypadku "ID"), indeksator importuje klucz podstawowy jako klucz dokumentu.

Mapowanie typów danych

Poniższa tabela mapuje bazę danych MySQL na odpowiedniki usługi Azure AI Search. Aby uzyskać więcej informacji, zobacz Obsługiwane typy danych (Azure AI Search).

Uwaga

Wersja zapoznawcza nie obsługuje typów geometrii i obiektów blob.

Typy danych MySQL Typy pól usługi Azure AI Search
bool, boolean Edm.Boolean, Edm.String
tinyint, , smallint, mediumint, int, , integeryear Edm.Int32, Edm.Int64, Edm.String
bigint Edm.Int64, Edm.String
float, , doublereal Edm.Double, Edm.String
date, , datetimetimestamp Edm.DateTimeOffset, Edm.String
char, varchar, , tinytext, textmediumtext, longtext, , setenumtime Edm.String
niepodpisane dane liczbowe, szeregowe, dziesiętne, bitowe, blob, binarne, geometryczne Nie dotyczy

Konfigurowanie i uruchamianie indeksatora MySQL

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.

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

{
    "name" : "hotels-mysql-idxr",
    "dataSourceName" : "hotels-mysql-ds",
    "targetIndexName" : "hotels-mysql-ix",
    "disabled": null,
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": null,
        "maxFailedItemsPerBatch": null,
        "base64EncodeKeys": null,
        "configuration": { }
        },
    "fieldMappings" : [ ],
    "encryptionKey": null
}

Kluczowe punkty:

Sprawdzanie stanu indeksatora

Wyślij żądanie Get Indexer Status (Pobierz stan indeksatora), aby monitorować wykonywanie indeksatora:

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2023-11-01
  Content-Type: application/json  
  api-key: [admin key]

Odpowiedź zawiera stan i liczbę przetworzonych elementów. Powinien on wyglądać podobnie do poniższego przykładu:

{
    "status":"running",
    "lastResult": {
        "status":"success",
        "errorMessage":null,
        "startTime":"2024-02-21T00:23:24.957Z",
        "endTime":"2024-02-21T00:36:47.752Z",
        "errors":[],
        "itemsProcessed":1599501,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
    },
    "executionHistory":
    [
        {
            "status":"success",
            "errorMessage":null,
            "startTime":"2024-02-21T00:23:24.957Z",
            "endTime":"2024-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        ... earlier history items
    ]
}

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 i zmienionych wierszy

Gdy indeksator w pełni wypełni indeks wyszukiwania, może być konieczne uruchomienie kolejnych indeksatorów w celu przyrostowego indeksowania tylko nowych i zmienionych wierszy w bazie danych.

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

W przypadku indeksatorów usługi Azure Database for MySQL jedynymi obsługiwanymi zasadami są .HighWaterMarkChangeDetectionPolicy

Zasady wykrywania zmian indeksatora polegają na tym , że kolumna wysokiego znacznika wody przechwytuje wersję wiersza lub datę i godzinę ostatniej aktualizacji wiersza. Często jest to kolumna DATE, DATETIMElub TIMESTAMP z dokładnością wystarczającą do spełnienia wymagań kolumny z wysokim znacznikiem wody.

W bazie danych MySQL kolumna wysokiego limitu wody musi spełniać następujące wymagania:

  • Wszystkie wstawiane dane muszą określać 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 WHERE klauzulami i ORDER BY można wykonywać wydajnie: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

W poniższym przykładzie przedstawiono definicję źródła danych z zasadami wykrywania zmian:

{
    "name" : "[Data source name]",
    "type" : "mysql",
    "credentials" : { "connectionString" : "[connection string]" },
    "container" : { "name" : "[table or view name]" },
    "dataChangeDetectionPolicy" : {
        "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName" : "[last_updated column name]"
    }
}

Ważne

Jeśli używasz widoku, musisz ustawić zasady wysokiego limitu wody w źródle danych indeksatora.

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

Indeksowanie usuniętych wierszy

Gdy wiersze są usuwane z tabeli lub widoku, zwykle chcesz usunąć te wiersze z indeksu wyszukiwania. Jeśli jednak wiersze są fizycznie usuwane z tabeli, indeksator nie ma możliwości wnioskowania o obecności rekordów, które już nie istnieją. Rozwiązaniem jest użycie techniki usuwania nietrwałego do logicznego usuwania wierszy bez usuwania ich z tabeli. Dodaj kolumnę do tabeli lub widoku i oznacz wiersze jako usunięte przy użyciu tej kolumny.

Biorąc pod uwagę kolumnę, która zapewnia stan usuwania, indeksator można skonfigurować tak, aby usunąć wszystkie dokumenty wyszukiwania, dla których stan usuwania jest ustawiony na true. Właściwość konfiguracji, która obsługuje to zachowanie, to zasady wykrywania usuwania danych określone w definicji źródła danych w następujący sposób:

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

Musi softDeleteMarkerValue być ciągiem. 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).

Następne kroki

Teraz możesz uruchomić indeksator, monitorować stan lub zaplanować wykonywanie indeksatora. Następujące artykuły dotyczą indeksatorów, które ściągają zawartość z usługi Azure MySQL: