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. Aby indeksować zawartość, możesz użyć wersji 2020-06-30-preview lub nowszej. Zalecamy najnowszą wersję zapoznawcza interfejsu API. 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ć interfejsu API REST w wersji zapoznawczej.
{
"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 Parametry połączenia 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 , , integer year |
Edm.Int32, Edm.Int64, Edm.String |
bigint |
Edm.Int64, Edm.String |
float , , double real |
Edm.Double, Edm.String |
date , , datetime timestamp |
Edm.DateTimeOffset, Edm.String |
char , varchar , , tinytext , text mediumtext , longtext , , set enum time |
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:
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.
Indeksator jest uruchamiany automatycznie po jego utworzeniu. Można temu zapobiec, ustawiając wartość
disabled
.true
Aby kontrolować wykonywanie indeksatora, uruchom indeksator na żądanie lub umieść go zgodnie z harmonogramem.
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=2024-05-01-preview
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
, DATETIME
lub 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 iORDER 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: