Indexování dat z Azure Database for MySQL

Důležité

Podpora MySQL je aktuálně ve verzi Public Preview v rámci doplňkových podmínek použití. K indexování obsahu použijte rozhraní REST API verze Preview (2020-06-30 preview nebo novější). V současné době neexistuje žádná podpora portálu.

V tomto článku se dozvíte, jak nakonfigurovat indexer, který importuje obsah z Azure Database for MySQL a jak ho prohledávat v Azure Cognitive Search.

Tento článek doplňuje vytvoření indexeru s informacemi, které jsou specifické pro indexování souborů ve službě Azure DB for MySQL. Pomocí rozhraní REST API demonstruje třídílný pracovní postup společný pro všechny indexery: vytvoření zdroje dat, vytvoření indexeru, vytvoření indexeru. Pokud je nakonfigurováno tak, aby obsahovalo vysokou značku vody a obnovitelné odstranění, indexer provede všechny změny, nahraje a odstraní databázi MySQL a projeví tyto změny v indexu hledání. K extrakci dat dochází při odeslání požadavku Vytvořit indexer.

Požadavky

Omezení verze Preview

Detekce sledování změn a odstranění v současné době nefunguje, pokud je datum nebo časové razítko jednotné pro všechny řádky. Jedná se o známý problém, který se vyřeší v aktualizaci na verzi Preview. Dokud se tento problém nevyřeší, nepřidávejte do indexeru MySQL sadu dovedností.

Verze Preview nepodporuje typy geometrie a objekty blob.

Jak je uvedeno, neexistuje žádná podpora portálu pro vytváření indexeru, ale indexer MySQL a zdroj dat je možné spravovat na portálu, jakmile existují. Můžete například upravit definice a resetovat, spustit nebo naplánovat indexer.

Definování zdroje dat

Definice zdroje dat určuje data pro indexování, přihlašovací údaje a zásady pro identifikaci změn v datech. Zdroj dat je definován jako nezávislý prostředek, aby ho mohl používat více indexerů.

  1. Vytvoření nebo aktualizace zdroje dat určuje definici. Při vytváření zdroje dat nezapomeňte použít verzi rozhraní REST API verze Preview (2020-06-30-Preview nebo novější).

    POST https://[search service name].search.windows.net/datasources?api-version=2020-06-30-Preview
    Content-Type: application/json
    api-key: [admin key]
    
    {   
        "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]"
        }
    }
    
  2. Nastavte "type" na "mysql" (povinné).

  3. Nastavte "přihlašovací údaje" na připojovací řetězec ADO.NET. Připojovací řetězce najdete v Azure Portal na stránce Připojovací řetězce pro MySQL.

  4. Nastavte "kontejner" na název tabulky.

  5. Pokud jsou data nestálá, nastavte "dataChangeDetectionPolicy" a chcete, aby indexer vyzvedal pouze nové a aktualizované položky v následných spuštěních.

  6. Pokud chcete odebrat vyhledávací dokumenty z indexu hledání při odstranění zdrojové položky, nastavte "dataDeletionDetectionPolicy".

Přidání vyhledávacích polí do indexu

Do indexu hledání přidejte pole indexu vyhledávání, která odpovídají polím v tabulce.

Vytvoření nebo aktualizace indexu určuje pole:

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

Pokud primární klíč ve zdrojové tabulce odpovídá klíči dokumentu (v tomto případě ID), indexer naimportuje primární klíč jako klíč dokumentu.

Mapování datových typů

Následující tabulka mapuje databázi MySQL na ekvivalenty Cognitive Search. Další informace najdete v tématu Podporované datové typy (Azure Cognitive Search).

Poznámka

Verze Preview nepodporuje typy geometrie a objekty blob.

Datové typy MySQL Typy polí Cognitive 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, mediumtext, text, longtext, enum, set, time Edm.String
číselná data bez znaménka, pořadové číslo, desetinné číslo, dec, bit, objekt blob, binární, geometrie

Konfigurace a spuštění indexeru MySQL

Po vytvoření indexu a zdroje dat jste připraveni vytvořit indexer. Konfigurace indexeru určuje vstupy, parametry a vlastnosti, které řídí chování doby spuštění.

  1. Vytvořte nebo aktualizujte indexer tím, že ho pojmenujte a odkazujete na zdroj dat a cílový index:

    POST https://[search service name].search.windows.net/indexers?api-version=2020-06-30
    
    {
        "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
    }
    
  2. Zadejte mapování polí , pokud existují rozdíly v názvu nebo typu pole nebo pokud potřebujete v indexu vyhledávání více verzí zdrojového pole.

Indexer se automaticky spustí při jeho vytvoření. Můžete tomu zabránit nastavením "zakázáno" na hodnotu true. Pokud chcete řídit provádění indexeru, spusťte indexer na vyžádání nebo ho umístěte do plánu.

Kontrola stavu indexeru

Pokud chcete monitorovat stav indexeru a historii spuštění, odešlete žádost o stav indexeru :

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

Odpověď obsahuje stav a počet zpracovaných položek. Měl by vypadat podobně jako v následujícím příkladu:

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

Historie provádění obsahuje až 50 naposledy dokončených spuštění, které jsou seřazené v obráceném chronologickém pořadí tak, aby se provedlo první spuštění.

Indexování nových a změněné řádky

Jakmile indexer plně naplní indexer vyhledávání, můžete chtít, aby následující indexer běžel přírůstkově indexovat pouze nové a změněné řádky v databázi.

Chcete-li povolit přírůstkové indexování, nastavte vlastnost dataChangeDetectionPolicy v definici zdroje dat. Tato vlastnost říká indexeru, který mechanismus sledování změn se používá ve vašich datech.

Pro Azure Database for MySQL indexerů je jedinou podporovanou zásadou HighWaterMarkChangeDetectionPolicy.

Zásada detekce změn indexeru spoléhá na to, že má sloupec "vysoká značka vody", který zachycuje verzi řádku nebo datum a čas poslední aktualizace řádku. Často se jedná o sloupec DATE, DATETIME nebo TIMESTAMP, který je dostatečný pro splnění požadavků sloupce s vysokou značkou vody.

Ve vaší databázi MySQL musí sloupec vysoké značky splňovat následující požadavky:

  • Všechna vložení dat musí zadat hodnotu sloupce.
  • Všechny aktualizace položky také mění hodnotu sloupce.
  • Hodnota tohoto sloupce se zvyšuje při každém vložení nebo aktualizaci.
  • Dotazy s následujícími klauzulemi WHERE a ORDER BY je možné efektivně provést: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

Následující příklad ukazuje definici zdroje dat se zásadami detekce změn:

POST https://[search service name].search.windows.net/datasources?api-version=2020-06-30-Preview
Content-Type: application/json
api-key: [admin key]
    {
        "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]"
        }
    }

Důležité

Pokud používáte zobrazení, musíte ve zdroji dat indexeru nastavit zásady vysoké značky vody.

Pokud zdrojová tabulka nemá index ve sloupci s vysokou značkou vody, můžou dojít k vypršení časového limitu dotazů používaných indexerem MySQL. Konkrétně klauzule vyžaduje, aby index běžel efektivně, ORDER BY [High Water Mark Column] když tabulka obsahuje mnoho řádků.

Indexování odstraněných řádků

Když se řádky odstraní z tabulky nebo zobrazení, obvykle chcete tyto řádky odstranit také z indexu vyhledávání. Pokud jsou však řádky fyzicky odebrány z tabulky, indexer nemá způsob, jak odvodit přítomnost záznamů, které již neexistují. Řešením je použít metodu obnovitelného odstranění k logickému odstranění řádků bez jejich odebrání z tabulky. Uděláte to tak, že přidáte sloupec do tabulky nebo zobrazíte a označíte řádky jako odstraněné pomocí tohoto sloupce.

Vzhledem k tomu, že sloupec, který poskytuje stav odstranění, je možné indexer nakonfigurovat tak, aby odebral všechny vyhledávací dokumenty, pro které je stav odstranění nastavený na hodnotu true. Vlastnost konfigurace, která toto chování podporuje, je zásada detekce odstranění dat, která je určena v definici zdroje dat následujícím způsobem:

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

"softDeleteMarkerValue" musí být řetězec. Pokud máte například celočíselnou sloupec, ve kterém jsou odstraněné řádky označené hodnotou 1, použijte "1". Pokud máte sloupec BIT, ve kterém jsou odstraněné řádky označené logickou hodnotou true, použijte řetězcový literál True nebo true (případ nezáleží).

Další kroky

Nyní můžete spustit indexer, monitorovat stav nebo naplánovat spuštění indexeru. Následující články platí pro indexery, které načítá obsah z Azure MySQL: