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


Adatok indexelése az Azure Table Storage-ból

Ebből a cikkből megtudhatja, hogyan konfigurálhat olyan indexelőt, amely tartalmat importál az Azure Table Storage-ból, és hogyan teszi kereshetővé az Azure AI Searchben. Az indexelő bemenetei az ön entitásai, egyetlen táblában. A kimenet egy keresési index, amely az egyes mezőkben tárolt kereshető tartalmakat és metaadatokat tartalmazza.

Ez a cikk kiegészíti az Indexelő létrehozását az Azure Table Storage-ból való indexelésre vonatkozó információkkal. 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.

Előfeltételek

  • Azure Table Storage

  • Szöveget tartalmazó táblázatok. Ha bináris adatokkal rendelkezik, fontolja meg az AI-bővítést a képelemzéshez.

  • Olvasási engedélyek az Azure Storage-ban. A "teljes hozzáférés" kapcsolati sztring tartalmaz egy kulcsot, amely hozzáférést biztosít a tartalomhoz, de ha Azure-szerepköröket használ, győződjön meg arról, hogy a keresési szolgáltatás által felügyelt identitás rendelkezik adatokkal és olvasói engedélyekkel.

  • REST-ügyfél használatával a cikkben bemutatottakhoz hasonló REST-hívásokat hozhat létre.

Az adatforrás meghatározása

Az adatforrásdefiníció megadja az indexelendő forrásadatokat, a hitelesítő adatokat és a változásészlelési szabályzatokat. Az adatforrás egy független erőforrás, amelyet több indexelő is használhat.

  1. Adatforrás létrehozása vagy frissítése a definíció beállításához:

     POST https://[service name].search.windows.net/datasources?api-version=2023-11-01 
     {
         "name": "my-table-storage-ds",
         "description": null,
         "type": "azuretable",
         "subtype": null,
         "credentials": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<account name>"
         },
         "container": {
            "name": "my-table-in-azure-storage",
            "query": ""
         },
         "dataChangeDetectionPolicy": null,
         "dataDeletionDetectionPolicy": null,
         "encryptionKey": null,
         "identity": null
     }
    
  2. Állítsa be a "azuretable" "type" (típus) értéket (kötelező).

  3. Állítsa be a "hitelesítő adatokat" egy Azure Storage-kapcsolati sztring. A következő szakasz a támogatott formátumokat ismerteti.

  4. Állítsa a "container" értéket a tábla nevére.

  5. Igény szerint állítsa a "lekérdezést" egy szűrőre a PartitionKeyen. A tulajdonság beállítása ajánlott eljárás, amely javítja a teljesítményt. Ha a "lekérdezés" null értékű, az indexelő teljes táblázatvizsgálatot hajt végre, ami gyenge teljesítményt eredményezhet, ha a táblák nagyok.

Az adatforrás-definíciók tartalmazhatnak helyreállítható törlési szabályzatokat is, ha azt szeretné, hogy az indexelő töröljön egy keresési dokumentumot, amikor a forrásdokumentum törlésre van megjelölve.

Támogatott hitelesítő adatok és kapcsolati sztring

Az indexelők az alábbi kapcsolatokkal csatlakozhatnak egy táblához.

Teljes hozzáférésű tárfiók kapcsolati sztring
{ "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key>;" }
A kapcsolati sztring az Azure Portal Tárfiók lapjáról a bal oldali navigációs panel Access-kulcsainak kiválasztásával szerezheti be. Ügyeljen arra, hogy a teljes kapcsolati sztring ne csak egy kulcsot válasszon.
Felügyelt identitás kapcsolati sztring
{ "connectionString" : "ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Storage/storageAccounts/<your storage account name>/;" }
Ez a kapcsolati sztring nem igényel fiókkulcsot, de korábban konfigurálnia kell egy keresési szolgáltatást a felügyelt identitással való csatlakozáshoz.
Tárfiók megosztott hozzáférésű jogosultságkódja** (SAS) kapcsolati sztring
{ "connectionString" : "BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rl;" }
Az SAS-nek rendelkeznie kell a táblákra és entitásokra vonatkozó listával és olvasási engedélyekkel.
Tároló közös hozzáférésű jogosultságkódja
{ "connectionString" : "ContainerSharedAccessUri=https://<your storage account>.blob.core.windows.net/<container name>?sv=2016-05-31&sr=c&sig=<the signature>&se=<the validity end time>&sp=rl;" }
Az SAS-nek rendelkeznie kell a tárolóra vonatkozó listával és olvasási engedélyekkel. További információ: Közös hozzáférésű jogosultságkódok használata.

Feljegyzés

SAS-hitelesítő adatok használata esetén az adatforrás hitelesítő adatait rendszeresen frissítenie kell megújított aláírásokkal a lejáratuk megakadályozása érdekében. Amikor az SAS-hitelesítő adatok lejárnak, az indexelő a következőhöz hasonló hibaüzenettel fog meghiúsulni: "A kapcsolati sztring megadott hitelesítő adatok érvénytelenek vagy lejártak".

Partíció a jobb teljesítmény érdekében

Az Azure AI Search alapértelmezés szerint a következő belső lekérdezési szűrőt használja annak nyomon követésére, hogy mely forrásentitások frissültek az utolsó futtatás óta: Timestamp >= HighWaterMarkValue. Mivel az Azure-táblák nem rendelkeznek másodlagos indexel a Timestamp mezőben, az ilyen típusú lekérdezések teljes táblavizsgálatot igényelnek, ezért nagy táblák esetében lassúak.

A teljes vizsgálat elkerülése érdekében táblapartíciókkal szűkítheti az egyes indexelő feladatok hatókörét.

  • Ha az adatok természetesen több partíciótartományba is particionálhatók, hozzon létre egy adatforrást és egy megfelelő indexelőt minden partíciótartományhoz. Mostantól minden indexelőnek csak egy adott partíciótartományt kell feldolgoznia, ami jobb lekérdezési teljesítményt eredményez. Ha az indexelni kívánt adatokhoz kevés rögzített partíció tartozik, még jobb: minden indexelő csak partícióvizsgálatot végez.

    Ha például létrehoz egy adatforrást egy partíciótartomány kulcsokkal 000 való feldolgozásához 100, használjon egy ilyen lekérdezést: "container" : { "name" : "my-table", "query" : "PartitionKey ge '000' and PartitionKey lt '100' " }

  • Ha az adatok particionálása idő szerint történik (például ha naponta vagy hetente hoz létre új partíciót), fontolja meg a következő megközelítést:

    • Az adatforrás definíciójában adjon meg egy, a következő példához hasonló lekérdezést: (PartitionKey ge <TimeStamp>) and (other filters).

    • Monitorozza az indexelő állapotát az Indexelő állapotának lekérése API használatával, és rendszeresen frissítse a <TimeStamp> lekérdezés állapotát a legújabb sikeres magas vízjel érték alapján.

    • Ezzel a módszerrel, ha teljes újraindexelést kell aktiválnia, állítsa alaphelyzetbe az adatforrás-lekérdezést az indexelő alaphelyzetbe állítása mellett.

Keresési mezők hozzáadása indexhez

Egy keresési indexben adjon hozzá mezőket a táblaentitások tartalmának és metaadatainak elfogadásához.

  1. Hozzon létre vagy frissítsen egy indexet az entitásokból származó tartalmakat tároló keresési mezők definiálásához:

    POST https://[service name].search.windows.net/indexes?api-version=2023-11-01 
    {
      "name" : "my-search-index",
      "fields": [
        { "name": "Key", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "SomeColumnInMyTable", "type": "Edm.String", "searchable": true }
      ]
    }
    
  2. Hozzon létre egy dokumentumkulcsmezőt ("kulcs": igaz), de hagyja, hogy az indexelő automatikusan kitöltse. A táblaindexelő kitölti a kulcsmezőt összefűzött partícióval és sorkulcsokkal a táblából. Ha például egy sor PartitionKey 1 értéke és a RowKey értéke1_123, akkor a kulcs értéke .11_123 Ha a partíciókulcs null értékű, a rendszer csak a sorkulcsot használja.

    Ha az Adatok importálása varázslóval hozza létre az indexet, a portál egy "Kulcs" mezőt keres a keresési indexhez, és implicit mezőleképezést használ a forrás- és célmezők összekapcsolásához. Nem kell saját maga hozzáadnia a mezőt, és nem kell mezőleképezést beállítania.

    Ha REST API-kat használ, és implicit mezőleképezéseket szeretne, hozza létre és nevezze el a dokumentumkulcs "Kulcs" mezőjét a keresési index definíciójában az előző lépésben ({ "name": "Key", "type": "Edm.String", "key": true, "searchable": false }) látható módon. Az indexelő automatikusan kitölti a Kulcs mezőt, és nincs szükség mezőleképezésre.

    Ha nem szeretne egy "Kulcs" nevű mezőt a keresési indexben, adjon hozzá egy explicit mezőleképezést az indexelő definíciójában a kívánt mezőnévvel, és állítsa a forrásmezőt "Kulcs" értékre:

     "fieldMappings" : [
       {
         "sourceFieldName" : "Key",
         "targetFieldName" : "MyDocumentKeyFieldName"
       }
    ]
    
  3. Most vegye fel az indexbe a kívánt egyéb entitásmezőket. Ha például egy entitás a következő példához hasonlóan néz ki, akkor a keresési indexnek a HotelName, a Leírás és a Kategória mezőivel kell rendelkeznie ezeknek az értékeknek a fogadásához.

    Képernyőkép a Storage böngésző táblatartalmairól.

    Az azonos nevek és a kompatibilis adattípusok használata minimálisra csökkenti a mezőleképezések szükségességét. Ha a nevek és a típusok megegyeznek, az indexelő automatikusan meghatározhatja az adatelérési utat.

A táblaindexelő konfigurálása és futtatása

Miután rendelkezik indexel és adatforrásokkal, 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.

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

    POST https://[service name].search.windows.net/indexers?api-version=2023-11-01
    {
        "name" : "my-table-indexer",
        "dataSourceName" : "my-table-storage-ds",
        "targetIndexName" : "my-search-index",
        "disabled": null,
        "schedule": null,
        "parameters" : {
            "batchSize" : null,
            "maxFailedItems" : null,
            "maxFailedItemsPerBatch" : null,
            "base64EncodeKeys" : null,
            "configuration" : { }
        },
        "fieldMappings" : [ ],
        "cache": null,
        "encryptionKey": null
    }
    
  2. Mezőleképezéseket adhat meg, ha a mezőnév vagy a típus eltérést mutat, vagy ha egy forrásmező több verziójára van szüksége a keresési indexben. A Cél mező a keresési indexben lévő mező neve.

     "fieldMappings" : [
       {
         "sourceFieldName" : "Description",
         "targetFieldName" : "HotelDescription"
       }
    ]
    
  3. További információt az egyéb tulajdonságokról az Indexelő létrehozása című témakörben talál.

Az indexelő automatikusan fut a létrehozásakor. Ezt úgy akadályozhatja meg, hogy a "letiltva" értéket igaz értékre állítja. Az indexelő végrehajtásának szabályozásához futtasson egy indexelőt igény szerint , vagy ütemezze.

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

Az indexelőzmények állapotának és végrehajtási előzményeinek figyeléséhez küldjön egy indexelőzmény-lekéréses kérést:

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2023-11-01
  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":"2023-02-21T00:23:24.957Z",
            "endTime":"2023-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        "executionHistory":
        [
            {
                "status":"success",
                "errorMessage":null,
                "startTime":"2023-02-21T00:23:24.957Z",
                "endTime":"2023-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ő.

Következő lépések

További információ az indexelő futtatásáról, a monitorozás állapotáról vagy az indexelő végrehajtásának ütemezéséről. Az alábbi cikkek azOkra az indexelőkre vonatkoznak, amelyek tartalmat kérnek le az Azure Storage-ból: