Megosztás a következőn keresztül:


Adatok indexelése rugalmas Azure Database for MySQL-kiszolgálóról

Fontos

A MySQL-támogatás jelenleg nyilvános előzetes verzióban érhető el a kiegészítő használati feltételek alatt. A 2020-06-30-preview vagy újabb verzióval indexelheti a tartalmat. Javasoljuk, hogy a legújabb előzetes verziójú API-t használja. Jelenleg nincs portáltámogatás.

Ebből a cikkből megtudhatja, hogyan konfigurálhat olyan indexelőt, amely tartalmat importál az Azure Database for MySQL-ből, és hogyan teszi kereshetővé az Azure AI Searchben. Az indexelő bemenetei az Ön sorai egyetlen táblában vagy nézetben. A kimenet egy keresési index, amelyben az egyes mezőkben kereshető tartalom található.

Ez a cikk kiegészíti a rugalmas Azure Database for MySQL-kiszolgálóról történő indexelésre vonatkozó információkat tartalmazó indexelő létrehozását. A REST API-k segítségével egy háromrészes munkafolyamatot mutat be, amely az összes indexelőre jellemző: adatforrás létrehozása, index létrehozása, indexelő létrehozása. Az adatkinyerés az Indexelő létrehozása kérés elküldésekor történik.

Ha magas vízjelre és helyreállítható törlésre van konfigurálva, az indexelő elvégzi a MySQL-adatbázis összes módosítását, feltöltését és törlését. A keresési index változásait tükrözi. Az adatkinyerés az Indexelő létrehozása kérés elküldésekor történik.

Előfeltételek

Előzetes verzióra vonatkozó korlátozások

A változáskövetés és a törlésészlelés jelenleg nem működik, ha a dátum vagy az időbélyeg minden sorban egységes. Ez a korlátozás egy ismert probléma, amelyet az előzetes verzió frissítésében kell elhárítani. A probléma megoldásáig ne adjon hozzá készségkészletet a MySQL-indexelőhöz.

Az előzetes verzió nem támogatja a geometriatípusokat és a blobokat.

Mint említettük, az indexelők létrehozásához nincs portáltámogatás, de a MySQL-indexelők és -adatforrások a portálon kezelhetők, ha már léteznek. Szerkesztheti például a definíciókat, és alaphelyzetbe állíthatja, futtathatja vagy ütemezheti az indexelőt.

Az adatforrás meghatározása

Az adatforrás definíciója meghatározza az adatok indexeléséhez, hitelesítő adataihoz és szabályzataihoz az adatok változásainak azonosításához. Az adatforrás független erőforrásként van definiálva, így több indexelő is használhatja.

Az adatforrás létrehozása vagy frissítése határozza meg a definíciót. Az adatforrás létrehozásakor mindenképpen használjon előzetes REST API-t.

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

Főbb pontok:

  • Állítsa be a (kötelező) értéket type"mysql" .

  • Állítsa be credentials egy ADO.NET kapcsolati sztring. Kapcsolati sztring az Azure Portalon, a MySQL Kapcsolati sztringek lapján találhatja meg.

  • Állítsa be container a tábla nevét.

  • Adja meg dataChangeDetectionPolicy , hogy az adatok változékonyak-e, és azt szeretné, hogy az indexelő csak az új és frissített elemeket vegye fel a későbbi futtatások során.

  • Ha dataDeletionDetectionPolicy el szeretné távolítani a keresési dokumentumokat a keresési indexből a forráselem törlésekor.

Index létrehozása

Az indexséma létrehozása vagy frissítése:

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

Ha a forrástábla elsődleges kulcsa megegyezik a dokumentumkulcstal (ebben az esetben az "ID"), az indexelő importálja az elsődleges kulcsot dokumentumkulcsként.

Adattípusok leképezése

Az alábbi táblázat leképzi a MySQL-adatbázist az Azure AI Search megfelelőire. További információ: Támogatott adattípusok (Azure AI Search).

Feljegyzés

Az előzetes verzió nem támogatja a geometriatípusokat és a blobokat.

MySQL-adattípusok Az Azure AI Search mezőtípusai
bool, boolean Edm.Boolean, Edm.String
tinyint, smallint, mediumint, intintegeryear 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, mediumtexttext, longtext, enum, , settime Edm.String
aláíratlan numerikus adatok, soros, dec, dec, bit, blob, bináris, geometria n/a

A MySQL-indexelő konfigurálása és futtatása

Az index és az adatforrás létrehozása után készen áll az indexelő létrehozására. Az indexelő konfigurációja meghatározza a futási idő viselkedését vezérlő bemeneteket, paramétereket és tulajdonságokat.

Hozzon létre vagy frissítsen egy indexelőt úgy, hogy megad neki egy nevet, és hivatkozik az adatforrásra és a célindexre:

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

Főbb pontok:

Az indexelő állapotának ellenőrzése

Indexelő állapotának lekérése kérés küldése az indexelő végrehajtásának figyeléséhez:

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

A válasz tartalmazza az állapotot és a feldolgozott elemek számát. A következő példához hasonlóan kell kinéznie:

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

A végrehajtási előzmények legfeljebb 50 legutóbbi végrehajtást tartalmaznak, amelyek fordított időrendi sorrendben vannak rendezve, hogy a legújabb végrehajtás legyen az első.

Új és módosított sorok indexelése

Miután egy indexelő kitöltött egy keresési indexet, érdemes lehet, hogy a későbbi indexelők növekményesen indexeljenek csak az adatbázis új és módosított sorait.

A növekményes indexelés engedélyezéséhez állítsa be a dataChangeDetectionPolicy tulajdonságot az adatforrás definíciójában. Ez a tulajdonság tájékoztatja az indexelőt, hogy melyik változáskövetési mechanizmust használja az adatokon.

Az Azure Database for MySQL-indexelők esetében az egyetlen támogatott szabályzat a HighWaterMarkChangeDetectionPolicy.

Az indexelő változásészlelési szabályzata egy magas vízjelű oszlopra támaszkodik, amely rögzíti a sor verzióját, vagy a sor utolsó frissítésének dátumát és időpontját. Ez gyakran egy DATE, DATETIMEvagy TIMESTAMP oszlop olyan részletességgel, amely elegendő a magas vízjelű oszlop követelményeinek való megfeleléshez.

A MySQL-adatbázisban a magas vízjel oszlopnak meg kell felelnie az alábbi követelményeknek:

  • Minden adatbeszúrásnak meg kell adnia az oszlop értékét.
  • Az elem minden frissítése az oszlop értékét is módosítja.
  • Az oszlop értéke minden beszúrással vagy frissítéssel nő.
  • A következő WHERE és ORDER BY záradékokkal rendelkező lekérdezések hatékonyan végrehajthatók: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

Az alábbi példa egy változásészlelési szabályzattal rendelkező adatforrásdefiníciót mutat be:

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

Fontos

Ha nézetet használ, magas vízjelszabályzatot kell beállítania az indexelő adatforrásában.

Ha a forrástábla nem rendelkezik indexel a magas vízjel oszlopban, a MySQL-indexelő által használt lekérdezések időtúllépést eredményezhetnek. A záradék megköveteli, hogy az ORDER BY [High Water Mark Column] index hatékonyan fusson, ha a tábla sok sort tartalmaz.

Törölt sorok indexelése

Ha sorokat töröl a táblázatból vagy a nézetből, általában ezeket a sorokat is törölni szeretné a keresési indexből. Ha azonban a sorok fizikailag törlődnek a táblából, az indexelőnek nincs módja arra, hogy a már nem létező rekordok jelenlétét következtethesse. A megoldás egy helyreállítható törlési technika használata sorok logikai törlésére anélkül, hogy eltávolítaná őket a táblából. Adjon hozzá egy oszlopot a táblához, vagy tekintse meg és jelölje meg a sorokat töröltként az adott oszlop használatával.

A törlési állapotot biztosító oszlop miatt az indexelő konfigurálható úgy, hogy eltávolítsa azokat a keresési dokumentumokat, amelyekre a törlési állapot be van állítva true. Az ezt a viselkedést támogató konfigurációs tulajdonság egy adattörlési észlelési szabályzat, amely az adatforrás definíciójában az alábbiak szerint van megadva:

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

A softDeleteMarkerValue sztringnek sztringnek kell lennie. Ha például van egy egész szám oszlopa, amelyben a törölt sorok 1 értékkel vannak megjelölve, használja a következőt "1": . Ha olyan oszlopa van BIT , amelyben a törölt sorok logikai igaz értékkel vannak megjelölve, használja a sztringkonstanst True vagy true (az eset nem számít).

Következő lépések

Most már futtathatja az indexelőt, figyelheti az állapotot vagy ütemezheti az indexelő végrehajtását. Az alábbi cikkek azOkra az indexelőkre vonatkoznak, amelyek tartalmat kérnek le az Azure MySQL-ből: