Indeksowanie danych z serwera elastycznego Azure Database for MySQL (wersja zapoznawcza)

Uwaga

Wyszukiwanie AI platformy Azure jest dostępna za pośrednictwem portalu Azure, interfejsów API REST i Azure SDKs. Jest także podstawą Foundry IQ — zarządzanej warstwy wiedzy, która przekształca treści przedsiębiorstwa w bazy wiedzy wielokrotnego użytku z uwzględnieniem uprawnień dla agentów w portalu Microsoft Foundry.

Ważne

Funkcje, możliwości lub właściwości oznaczone (wersja zapoznawcza) nie są objęte umową dotyczącą poziomu usług, nie są zalecane w przypadku obciążeń produkcyjnych i mogą ulec zmianie lub ograniczeniu, zanim staną się one ogólnie dostępne. Warunki Wyszukiwanie AI platformy Azure wersji zapoznawczej mają zastosowanie do wszystkich funkcji w wersji zapoznawczej, niezależnie od tego, czy jest ona autonomiczna, czy częścią ogólnie dostępnej funkcji.

Ważne

Te funkcje i możliwości obsługują połączenia z innymi usługami firmy Microsoft i usługami innych firm. Korzystanie z tych usług podlega odpowiednim warunkom i może spowodować przetwarzanie lub przechowywanie danych poza granicą zgodności Azure, a także dane przepływające do granicy zgodności Azure.

Do Ciebie należy decydowanie o tym, czy dane będą przepływać poza granice zgodności i granice geograficzne organizacji, oraz o wszelkich związanych z tym konsekwencjach, a także zapewnienie odpowiednich uprawnień, ograniczeń i zatwierdzeń.

Odpowiadasz za staranne przeglądanie i testowanie aplikacji, które tworzysz w kontekście konkretnych przypadków użycia, oraz podejmowanie wszelkich odpowiednich decyzji i dostosowań. Obejmuje to implementowanie własnych odpowiedzialnych środków zaradczych dotyczących sztucznej inteligencji, takich jak metaprompty, filtry zawartości lub inne systemy bezpieczeństwa oraz zapewnienie, że aplikacje spełniają odpowiednią jakość, niezawodność, bezpieczeństwo i standardy wiarygodności. Aby uzyskać więcej informacji, zobacz Wyszukiwanie AI platformy Azure Transparency Note.

Indeksator Azure Database for MySQL (wersja zapoznawcza) importuje zawartość z serwera elastycznego Azure Database for MySQL do indeksu Wyszukiwanie AI platformy Azure. Dane wejściowe indeksatora to wiersze z pojedynczej tabeli lub widoku. Dane wyjściowe to indeks wyszukiwania z zawartością, którą można przeszukiwać w poszczególnych polach.

Ten artykuł uzupełnia Tworzenie indeksatora o informacje specyficzne dla indeksowania z usługi Azure Database for MySQL Flexible Server. 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ę, gdy przesyłasz żądanie tworzenia indeksatora.

Po skonfigurowaniu do uwzględnienia wysokiego poziomu wody i miękkiego usuwania, indeksator pobiera wszystkie zmiany, przesyła i usuwa dane z bazy danych MySQL. Odzwierciedla te zmiany w indeksie wyszukiwania. Wyodrębnianie danych odbywa się, gdy przesyłasz żądanie tworzenia indeksatora.

Wymagania wstępne

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 obiektów geometrii i obiektów blob.

Jak wspomniano, nie ma obsługi portalu tworzenia indeksatora, ale indeksator MySQL i źródło danych można zarządzać w portalu Azure 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 na "mysql" (wymagane).

  • Ustaw credentials na łańcuch połączenia ADO.NET. Parametry połączenia można znaleźć w portalu Azure na stronie Strefa 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.

Uwaga

Dla właściwości nazwa kontenera wartość jest ograniczona, aby zezwalać tylko na litery, cyfry, podkreślenia (_), kropki (.), pojedyncze kreski (-) i nawiasy kwadratowe ([])

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 Wyszukiwanie AI platformy Azure. Aby uzyskać więcej informacji, zobacz Supported data types (Wyszukiwanie AI platformy Azure).

Uwaga

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

Typy danych MySQL typy pól Wyszukiwanie AI platformy Azure
bool, boolean Edm.Boolean, Edm.String
tinyint, , smallint, mediumint, int, , integeryear 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, mediumtexttext, longtext, , enumsettime Edm.String
niepodpisane dane liczbowe, szeregowe, dziesiętne, bitowe, blob, binarne, geometryczne N/A

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=2026-08-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 aktywować indeksowanie przyrostowe, skonfiguruj właściwość dataChangeDetectionPolicy w definicji źródła danych. Ta właściwość informuje indeksator, który mechanizm śledzenia zmian jest używany dla Twoich danych.

W przypadku indeksatorów Azure Database for MySQL jedyną obsługiwaną zasadą jest HighWaterMarkChangeDetectionPolicy.

Zasady wykrywania zmian indeksatora polegają na tym, że kolumna wysokiej kreski 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 poziomem wody.

W bazie danych MySQL kolumna oznaczająca najwyższy poziom 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ć politykę wysokiego poziomu w źródle danych indeksatora.

Jeśli tabela źródłowa nie ma indeksu na kolumnie 'high water mark', zapytania używane przez indeksator MySQL mogą przekraczać limit czasu. W szczególności klauzula ORDER BY [High Water Mark Column] wymaga indeksu, aby działać wydajnie, 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 miękkiego 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ą logiczną prawda (true), użyj literału ciągu znaków True 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 pobierających zawartość z Azure MySQL: