Adatok indexelése Azure Blob Storage

Ebből a cikkből megtudhatja, hogyan konfigurálhat olyan indexelőt, amely tartalmat importál Azure Blob Storage, és hogyan teszi kereshetővé Azure Cognitive Search. Az indexelő bemenetei a blobok, egyetlen tároló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 a Blob Storage-ra vonatkozó információkat tartalmazó indexelő létrehozását . A REST API-kkal egy háromrészes munkafolyamatot mutat be, amely az összes indexelőre jellemző: adatforrás létrehozása, index létrehozása és indexelő létrehozása. Az adatkinyerés az Indexer létrehozása kérelem elküldésekor történik.

A blobindexelőket gyakran használják AI-bővítéshez és szövegalapú feldolgozáshoz is. Ez a cikk a szövegalapú indexelés indexelőire összpontosít, ahol csak a szöveges tartalom és a metaadatok kerülnek be a teljes szöveges keresési forgatókönyvekbe.

Előfeltételek

  • Azure Blob Storage, Standard teljesítmény (általános célú v2).

  • A Blob Storage hozzáférési szintjei közé tartozik a gyakori elérésű, a ritka elérésű és az archív. A keresési indexelők csak a gyakori és a ritka elérésű elemeket érhetik el.

  • Szöveges tartalmat és metaadatokat biztosító blobok. Ha a blobok bináris tartalmat vagy strukturálatlan szöveget tartalmaznak, érdemes lehet AI-bővítést hozzáadni a kép- és természetes nyelvi feldolgozáshoz. A blobtartalmak nem léphetik túl a keresési szolgáltatási szint indexelőkorlátait .

  • Támogatott hálózati konfiguráció és adathozzáférés. Legalább olvasási engedélyekre lesz szüksége az Azure Storage-ban. A hozzáférési kulcsot tartalmazó tárolási kapcsolati sztring olvasási hozzáférést biztosítanak a tárolótartalomhoz. Ha ehelyett Azure AD bejelentkezéseket és szerepköröket használ, győződjön meg arról, hogy a keresési szolgáltatás felügyelt identitásarendelkezik Storage Blob-adatolvasó engedélyekkel.

    Alapértelmezés szerint a keresés és a tárterület is fogadja a nyilvános IP-címekről érkező kéréseket. Ha a hálózati biztonság nem jelent azonnali problémát, csak a kapcsolati sztring és olvasási engedélyekkel indexelheti a blobadatokat. Ha készen áll a hálózati védelem hozzáadására, az adathozzáféréssel kapcsolatos útmutatásért tekintse meg az Indexelő hozzáférése az Azure hálózati biztonsági szolgáltatásai által védett tartalmakhoz című témakört.

  • Használjon REST-ügyfelet, például Postman-alkalmazást, ha a cikkben bemutatottakhoz hasonló REST-hívásokat szeretne összeállítani.

Támogatott dokumentumformátumok

A blobindexelő a következő dokumentumformátumokból tud szöveget kinyerni:

  • CSV (lásd: CSV-blobok indexelése)
  • EML
  • EPUB
  • GZ
  • HTML
  • JSON (lásd: JSON-blobok indexelése)
  • KML (XML földrajzi ábrázoláshoz)
  • Microsoft Office-formátumok: DOCX/DOC/DOCM, XLSX/XLS/XLSM, PPTX/PPT/PPTM, MSG (Outlook-e-mailek), XML (2003 és 2006 WORD XML)
  • Dokumentumformátumok megnyitása: ODT, ODS, ODP
  • PDF
  • Egyszerű szöveges fájlok (lásd még : Egyszerű szöveg indexelése)
  • RTF
  • XML
  • ZIP

Az indexelendő blobok meghatározása

Az indexelés beállítása előtt tekintse át a forrásadatokat, és állapítsa meg, hogy a módosításokat elöl kell-e elvégezni. Az indexelők egyszerre egyetlen tárolóból is indexelhetik a tartalmat. Alapértelmezés szerint a tárolóban lévő összes blob feldolgozásra kerül. Több lehetőség közül választhat a szelektívebb feldolgozáshoz:

  • Helyezze a blobokat egy virtuális mappába. Az indexelő adatforrás-definíciója tartalmaz egy "lekérdezés" paramétert, amely virtuális mappát vehet fel. Ha virtuális mappát ad meg, a rendszer csak a mappában lévő blobokat indexeli.

  • Blobok belefoglalása vagy kizárása fájltípus szerint. A támogatott dokumentumformátumok listája segít meghatározni, hogy mely blobokat kell kizárni. Előfordulhat például, hogy olyan kép- vagy hangfájlokat szeretne kizárni, amelyek nem biztosítanak kereshető szöveget. Ezt a képességet az indexelő konfigurációs beállításai vezérlik.

  • Tetszőleges blobok belefoglalása vagy kizárása. Ha valamilyen okból ki szeretne hagyni egy adott blobot, hozzáadhatja a következő metaadat-tulajdonságokat és értékeket a Blob Storage-blobokhoz. Amikor egy indexelő ezt a tulajdonságot észleli, kihagyja a blobot vagy annak tartalmát az indexelési futtatás során.

    Tulajdonság neve Tulajdonságérték Magyarázat
    "AzureSearch_Skip" "true" Utasítja a blobindexelőt, hogy hagyja ki teljesen a blobot. Sem a metaadatokat, sem a tartalomkinyerési kísérleteket nem kísérli meg. Ez akkor hasznos, ha egy adott blob ismételten meghibásodik, és megszakítja az indexelési folyamatot.
    "AzureSearch_SkipContent" "true" Kihagyja a tartalmat, és csak a metaadatokat nyeri ki. ez egyenértékű a "dataToExtract" : "allMetadata"konfigurációs beállításokban leírt beállítással, amely csak egy adott blobra terjed ki.

Ha nem állít be belefoglalási vagy kizárási feltételeket, az indexelő hibaként jelent egy nem jogosult blobot, és továbblép. Ha elegendő hiba történik, a feldolgozás leállhat. A hibatűrést az indexelő konfigurációs beállításai között adhatja meg.

Az indexelők általában blobonként egy keresési dokumentumot hoznak létre, ahol a szöveges tartalom és a metaadatok egy index kereshető mezőiként vannak rögzítve. Ha a blobok teljes fájlok, több keresési dokumentumba is elemezheti őket. Elemezheti például egy CSV-fájl sorait, hogy soronként egy keresési dokumentumot hozzon létre.

Összetett vagy beágyazott dokumentum (például ZIP-archívum, mellékleteket tartalmazó beágyazott Outlook-e-maillel rendelkező Word dokumentum vagy . A mellékleteket tartalmazó MSG-fájl is egyetlen dokumentumként van indexelve. Például egy mellékletből kinyert összes kép. Az MSG-fájl a normalized_images mezőben lesz visszaadva. Ha rendelkezik képekkel, fontolja meg az AI-bővítés hozzáadását , hogy több keresési segédprogramot kapjon az adott tartalomból.

A dokumentum szöveges tartalma egy "content" nevű sztringmezőbe lesz kinyerve. Standard és felhasználó által definiált metaadatokat is kinyerhet.

Blob metaadatainak indexelése

A blob metaadatai indexelhetők is, és ez akkor hasznos, ha úgy gondolja, hogy a standard vagy egyéni metaadat-tulajdonságok bármelyike hasznos lehet a szűrőkben és a lekérdezésekben.

A felhasználó által megadott metaadat-tulajdonságokat a rendszer szó szerint kinyeri. Az értékek fogadásához meg kell adnia a típusú keresési index Edm.Stringmezőjét, amelynek neve megegyezik a blob metaadatkulcsával. Ha például egy blobnak van egy metaadatkulcsa Sensitivity , amelynek értéke High, akkor definiálnia kell egy nevű mezőt Sensitivity a keresési indexben, amely a értékkel Highlesz feltöltve.

A standard blob metaadat-tulajdonságai hasonló nevű és beírt mezőkbe nyerhetők ki, az alábbiak szerint. A blobindexelő automatikusan belső mezőleképezéseket hoz létre ezekhez a blob metaadat-tulajdonságokhoz, és az eredeti kötőjeles nevet ("metadata-storage-name") egy alábecsült egyenértékű névvé ("metadata_storage_name") konvertálja.

Továbbra is hozzá kell adnia az alászúrt mezőket az indexdefinícióhoz, de kihagyhatja a mezőleképezéseket, mert az indexelő automatikusan létrehozza a társításokat.

  • metadata_storage_name (Edm.String) – a blob fájlneve. Ha például van egy blobja /my-container/my-folder/subfolder/resume.pdf, a mező resume.pdfértéke .

  • metadata_storage_path (Edm.String) – a blob teljes URI-ja, beleértve a tárfiókot is. Például: https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdf

  • metadata_storage_content_type (Edm.String) – a blob feltöltéséhez használt kód által megadott tartalomtípus. Például: application/octet-stream.

  • metadata_storage_last_modified (Edm.DateTimeOffset) – a blob utolsó módosított időbélyege. Azure Cognitive Search ezzel az időbélyegzővel azonosítja a módosított blobokat, hogy elkerülje a kezdeti indexelés utáni összes újraindexelést.

  • metadata_storage_size (Edm.Int64) – a blob mérete bájtban.

  • metadata_storage_content_md5 (Edm.String) – A blobtartalom MD5-kivonata, ha elérhető.

  • metadata_storage_sas_token (Edm.String) – Egy ideiglenes SAS-jogkivonat, amelyet egyéni képességek használhatnak a blobhoz való hozzáféréshez. Ezt a jogkivonatot nem szabad későbbi használatra tárolni, mert lejárhat.

Végül az indexelendő blobok dokumentumformátumára vonatkozó metaadat-tulajdonságok is megjeleníthetők az indexsémában. A tartalomspecifikus metaadatokról további információt a Tartalom metaadatainak tulajdonságai című témakörben talál.

Fontos kiemelni, hogy nem kell mezőket definiálnia a keresési indexben szereplő összes fenti tulajdonsághoz – csak rögzítse az alkalmazáshoz szükséges tulajdonságokat.

Ez az indexelő jelenleg nem támogatja a blobindex-címkék indexelésé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.

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

    {
        "name" : "my-blob-datasource",
        "type" : "azureblob",
        "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
        "container" : { "name" : "my-container", "query" : "<optional-virtual-directory-name>" }
    }
    
  2. Állítsa a "type" (típus) értéket "azureblob" (kötelező).

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

  4. Állítsa a "tárolót" a blobtárolóra, és a "lekérdezés" használatával adja meg az almappákat.

Az adatforrás-definíciók helyreállítható törlési szabályzatokat is tartalmazhatnak, 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 sztringek

Az indexelők az alábbi kapcsolatokkal csatlakozhatnak egy blobtároló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 a Tárfiók lapon Azure Portal a bal oldali navigációs panel hozzáférési kulcsainak kiválasztásával szerezheti be. Mindenképpen válasszon ki egy teljes kapcsolati sztring, és ne csak egy kulcsot.
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árolókra és objektumokra (ebben az esetben blobokra) 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.

Megjegyzés

Ha SAS-hitelesítő adatokat használ, a lejáratuk elkerülése érdekében rendszeresen frissítenie kell az adatforrás hitelesítő adatait megújított aláírásokkal. Ha 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".

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

Egy keresési indexben adjon hozzá mezőket az Azure-blobok tartalmának és metaadatainak elfogadásához.

  1. Hozzon létre vagy frissítsen egy indexet a blobtartalmakat és metaadatokat tároló keresési mezők meghatározásához:

    POST https://[service name].search.windows.net/indexes?api-version=2020-06-30
    {
        "name" : "my-search-index",
        "fields": [
            { "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
            { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false },
            { "name": "metadata_storage_name", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true  },
            { "name": "metadata_storage_size", "type": "Edm.Int64", "searchable": false, "filterable": true, "sortable": true  },
            { "name": "metadata_storage_content_type", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },        
        ]
      }
    }
    
  2. Hozzon létre egy dokumentumkulcsmezőt ("kulcs": true). Blobtartalmak esetén a legjobb jelöltek a metaadatok tulajdonságai.

    • metadata_storage_path (alapértelmezett) az objektum vagy fájl teljes elérési útja. A kulcsmező ("azonosító" ebben a példában) metadata_storage_path értékeivel lesz feltöltve, mert ez az alapértelmezett érték.

    • metadata_storage_name, csak akkor használható, ha a nevek egyediek. Ha ezt a mezőt szeretné kulcsként használni, lépjen "key": true erre a meződefinícióra.

    • A blobokhoz hozzáadott egyéni metaadat-tulajdonság. Ehhez a beállításhoz a blobfeltöltési folyamatnak hozzá kell adnia ezt a metaadat-tulajdonságot az összes blobhoz. Mivel a kulcs egy kötelező tulajdonság, az érték nélküli blobok indexelése sikertelen lesz. Ha egyéni metaadat-tulajdonságot használ kulcsként, ne módosítsa a tulajdonságot. Az indexelők duplikált dokumentumokat adnak hozzá ugyanahhoz a blobhoz, ha a kulcstulajdonság megváltozik.

    A metaadatok tulajdonságai gyakran tartalmaznak olyan karaktereket, például / és -, amelyek érvénytelenek a dokumentumkulcsokhoz. Mivel az indexelő "base64EncodeKeys" tulajdonsággal rendelkezik (alapértelmezés szerint igaz), automatikusan kódolja a metaadat-tulajdonságot, és nincs szükség konfigurációra vagy mezőleképezésre.

  3. Adjon hozzá egy "content" mezőt a kibontott szöveg tárolásához az egyes fájlokból a blob "content" tulajdonságán keresztül. Ezt a nevet nem kell használnia, de így kihasználhatja az implicit mezőleképezések előnyeit.

  4. Adjon hozzá mezőket a szabványos metaadat-tulajdonságokhoz. Az indexelő beolvassa az egyéni metaadat-tulajdonságokat, a szabványos metaadat-tulajdonságokat és a tartalomspecifikus metaadat-tulajdonságokat .

A blobindexelő 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 határozza meg a futtatási idő viselkedését szabályozó bemeneteket, paramétereket és tulajdonságokat. Azt is megadhatja, hogy a blob mely részeit indexelje.

  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=2020-06-30
    {
      "name" : "my-blob-indexer",
      "dataSourceName" : "my-blob-datasource",
      "targetIndexName" : "my-search-index",
      "parameters": {
          "batchSize": null,
          "maxFailedItems": null,
          "maxFailedItemsPerBatch": null,
          "base64EncodeKeys": null,
          "configuration": {
              "indexedFileNameExtensions" : ".pdf,.docx",
              "excludedFileNameExtensions" : ".png,.jpeg",
              "dataToExtract": "contentAndMetadata",
              "parsingMode": "default"
          }
      },
      "schedule" : { },
      "fieldMappings" : [ ]
    }
    
  2. Állítsa be batchSize , hogy az alapértelmezett (10 dokumentum) kihasználatlan vagy túlterhelt-e az elérhető erőforrásokon. Az alapértelmezett kötegméretek adatforrás-specifikusak. A blobindexelés a kötegméretet 10 dokumentumra állítja a nagyobb átlagos dokumentumméret elismeréseként.

  3. A "konfiguráció" alatt szabályozhatja, hogy mely blobok legyenek fájltípus alapján indexelve, vagy hagyja meg nem határozva az összes blob lekéréséhez.

    A esetében "indexedFileNameExtensions"adja meg a fájlkiterjesztések vesszővel tagolt listáját (egy kezdő ponttal). Tegye ugyanezt "excludedFileNameExtensions" annak jelzésére, hogy mely bővítményeket kell kihagyni. Ha ugyanaz a bővítmény mindkét listában szerepel, akkor a rendszer kizárja az indexelésből.

  4. A "configuration" (konfiguráció) területen állítsa a "dataToExtract" értéket a blobok indexelt részeinek szabályozására:

  5. A "konfiguráció" alatt állítsa be az "parsingMode" értéket, ha a blobokat több keresési dokumentumra kell leképezni, vagy ha egyszerű szövegből, JSON-dokumentumokból vagy CSV-fájlokból állnak.

  6. Adja meg a mezőleképezéseket , 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 blobindexelés során gyakran kihagyhatja a mezőleképezéseket, mert az indexelő beépített támogatást nyújt a "tartalom" és a metaadatok tulajdonságainak az indexben hasonló nevű és beírt mezőkhöz való leképezéséhez. Metaadat-tulajdonságok esetén az indexelő automatikusan lecseréli a kötőjeleket - aláhúzásjelekre a keresési indexben.

  7. Az egyéb tulajdonságokról további információt az Indexelő létrehozása című témakörben talál. A paraméterleírások teljes listájáért lásd: Blobkonfigurációs paraméterek a REST API-ban.

Az indexelők létrehozásakor automatikusan fut. Ezt úgy akadályozhatja meg, hogy a "letiltva" értéket true (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 és a végrehajtási előzmények monitorozásához küldjön egy Indexelőzmény-lekérési kérést :

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2020-06-30
  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":"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
        ]
    }

A végrehajtási előzmények a legutóbb végrehajtott végrehajtások közül legfeljebb 50-et tartalmaznak, amelyek fordított időrendi sorrendben vannak rendezve, hogy a legújabb végrehajtás legyen az első.

Hibakezelés

Az indexelés során gyakran előforduló hibák közé tartoznak a nem támogatott tartalomtípusok, hiányzó tartalmak vagy túlméretezett blobok.

Alapértelmezés szerint a blobindexelő leáll, amint nem támogatott tartalomtípusú blobot (például hangfájlt) talál. A "excludedFileNameExtensions" paraméter használatával kihagyhat bizonyos tartalomtípusokat. Előfordulhat azonban, hogy az indexelést akkor is folytatni szeretné, ha hibák történnek, majd később hibakeresést végezhet az egyes dokumentumokban. Az indexelő hibáiról további információt az Indexelő hibaelhárítási útmutatója és az Indexer hibái és figyelmeztetései című témakörben talál.

Öt indexelőtulajdonság vezérli az indexelő válaszát hibák esetén.

PUT /indexers/[indexer name]?api-version=2020-06-30
{
  "parameters" : { 
    "maxFailedItems" : 10, 
    "maxFailedItemsPerBatch" : 10,
    "configuration" : { 
        "failOnUnsupportedContentType" : false, 
        "failOnUnprocessableDocument" : false,
        "indexStorageMetadataOnlyForOversizedDocuments": false
  }
}
Paraméter Érvényes értékek Description
"maxFailedItems" -1, null vagy 0, pozitív egész szám Folytassa az indexelést, ha hibák történnek a feldolgozás bármely pontján, akár blobok elemzésekor, akár dokumentumok indexhez való hozzáadásakor. Állítsa be ezeket a tulajdonságokat az elfogadható hibák számára. Egy érték lehetővé teszi a -1 feldolgozást, függetlenül attól, hogy hány hiba történik. Ellenkező esetben az érték pozitív egész szám.
"maxFailedItemsPerBatch" -1, null vagy 0, pozitív egész szám Ugyanaz, mint a fenti, de kötegelt indexeléshez használatos.
"failOnUnsupportedContentType" true (igaz) vagy false (hamis) Ha az indexelő nem tudja meghatározni a tartalomtípust, adja meg, hogy folytatja-e a feladatot, vagy nem.
"failOnUnprocessableDocument" true (igaz) vagy false (hamis) Ha az indexelő nem tud feldolgozni egy másként támogatott tartalomtípusú dokumentumot, adja meg, hogy folytatja-e a feladatot, vagy nem.
"indexStorageMetadataOnlyForOversizedDocuments" true (igaz) vagy false (hamis) A túlméretezett blobokat alapértelmezés szerint hibaként kezeli a rendszer. Ha ezt a paramétert igaz értékre állítja, az indexelő akkor is megpróbálja indexelni a metaadatait, ha a tartalom nem indexelhető. A blob méretére vonatkozó korlátozásokért lásd: szolgáltatáskorlátok.

Következő lépések

Mostantól szabályozhatja , hogyan futtathatja az indexelőt, figyelheti az állapotot vagy ütemezheti az indexelő végrehajtását. A következő cikkek azOkra az indexelőkre vonatkoznak, amelyek tartalmat kérnek le az Azure Storage-ból: