Oktatóanyag: Beágyazott JSON-blobok indexelése az Azure Storage-ból REST használatával

Az Azure AI Search képes JSON-dokumentumokat és tömböket indexelni az Azure Blob Storage-ban egy olyan indexelő használatával, amely képes félig strukturált adatok olvasására. A részben strukturált adatok címkéket és jelölőket tartalmaznak, amelyek a tartalmakat választják el az adatokon belül. Felosztja a különbséget a strukturálatlan adatok között, amelyeket teljes mértékben indexelni kell, és formálisan strukturált adatok, amelyek megfelelnek egy adatmodellnek, például egy mezőnként indexelhető relációs adatbázisséma között.

Ez az oktatóanyag bemutatja a beágyazott JSON-tömbök indexeléséhez. REST-ügyfelet és a Search REST API-kat használ a következő feladatok végrehajtásához:

  • Mintaadatok beállítása és adatforrás konfigurálása azureblob
  • Kereshető tartalmakat tartalmazó Azure AI Search-index létrehozása
  • Indexelő létrehozása és futtatása a tároló olvasásához és kereshető tartalom kinyeréséhez
  • Keresés az újonnan létrehozott indexben

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Előfeltételek

Feljegyzés

Ehhez az oktatóanyaghoz használhatja az ingyenes szolgáltatást. Az ingyenes keresési szolgáltatás három indexre, három indexelőre és három adatforrásra korlátozza. Az oktatóanyagban mindegyikből egyet hozhat majd létre. Mielőtt hozzákezdene, győződjön meg arról, hogy van helye a szolgáltatásban az új erőforrások elfogadásához.

Fájlok letöltése

Töltse le a mintaadattár zip-fájlját, és bontsa ki a tartalmat. További tudnivalókat itt talál.

A mintaadatok egyetlen JSON-fájl, amely egy JSON-tömböt és 1521 beágyazott JSON-elemet tartalmaz. A mintaadatok a Kaggle ny filharmonikus teljesítményelőzményeiből származnak. Egy JSON-fájlt választottunk, amely az ingyenes szint tárolási korlátai alatt marad.

Itt található az első beágyazott JSON a fájlban. A fájl fennmaradó része 1520 további koncertelőadási példányt tartalmaz.

    {
      "id": "7358870b-65c8-43d5-ab56-514bde52db88-0.1",
      "programID": "11640",
      "orchestra": "New York Philharmonic",
      "season": "2011-12",
      "concerts": [
        {
          "eventType": "Non-Subscription",
          "Location": "Manhattan, NY",
          "Venue": "Avery Fisher Hall",
          "Date": "2011-09-07T04:00:00Z",
          "Time": "7:30PM"
        },
        {
          "eventType": "Non-Subscription",
          "Location": "Manhattan, NY",
          "Venue": "Avery Fisher Hall",
          "Date": "2011-09-08T04:00:00Z",
          "Time": "7:30PM"
        }
      ],
      "works": [
        {
          "ID": "5733*",
          "composerName": "Bernstein,  Leonard",
          "workTitle": "WEST SIDE STORY (WITH FILM)",
          "conductorName": "Newman, David",
          "soloists": []
        },
        {
          "ID": "0*",
          "interval": "Intermission",
          "soloists": []
        }
      ]
    }

Mintaadatok feltöltése az Azure Storage-ba

  1. Az Azure Storage-ban hozzon létre egy új tárolót, és nevezze el ny-filharmóniamentesnek.

  2. Töltse fel a mintaadatfájlokat.

  3. Szerezze be a tárolási kapcsolati sztring, hogy kapcsolatot alakíthass ki az Azure AI Searchben.

    1. A bal oldalon válassza az Access-kulcsokat.

    2. Másolja a kapcsolati sztring az első vagy a második kulcshoz. A kapcsolati sztring a következő példához hasonló:

      DefaultEndpointsProtocol=https;AccountName=<your account name>;AccountKey=<your account key>;EndpointSuffix=core.windows.net
      

Keresési szolgáltatás URL-címének és API-kulcsának másolása

Ebben az oktatóanyagban az Azure AI Searchhez való csatlakozáshoz végpontra és API-kulcsra van szükség. Ezeket az értékeket az Azure Portalon szerezheti be.

  1. Jelentkezzen be az Azure Portalra, lépjen a keresési szolgáltatás áttekintési oldalára, és másolja az URL-címet. A végpontok például a következőképpen nézhetnek ki: https://mydemo.search.windows.net.

  2. A Gépház> Keys területen másolja a rendszergazdai kulcsot. Rendszergazda kulcsok objektumok hozzáadására, módosítására és törlésére szolgálnak. Két felcserélhető rendszergazdai kulcs van. Másolja valamelyiket.

    Screenshot of the URL and API keys in the Azure portal.

A REST-fájl beállítása

  1. Indítsa el a Visual Studio Code-ot, és hozzon létre egy új fájlt

  2. Adja meg a kérelemben használt változók értékeit:

    @baseUrl = PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE
    @apiKey = PUT-YOUR-ADMIN-API-KEY-HERE
    @storageConnection = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE
    @blobContainer = PUT-YOUR-CONTAINER-NAME-HERE
    
  3. Mentse a fájlt egy vagy .http egy .rest fájlkiterjesztés használatával.

Lásd : Rövid útmutató: Szövegkeresés REST használatával, ha segítségre van szüksége a REST-ügyféllel kapcsolatban.

Adatforrás létrehozása

Az Adatforrás létrehozása (REST) létrehoz egy adatforrás-kapcsolatot, amely meghatározza az indexelendő adatokat.

### Create a data source
POST {{baseUrl}}/datasources?api-version=2023-11-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
        "name" : "ny-philharmonic-ds",
        "description": null,
        "type": "azureblob",
        "subtype": null,
        "credentials": {
            "connectionString": "{{storageConnectionString}}"
        },
        "container": {
            "name": "{{blobContainer}}",
            "query": null
        },
        "dataChangeDetectionPolicy": null,
        "dataDeletionDetectionPolicy": null
    }

Küldje el a kérést. A válasznak így kell kinéznie:

HTTP/1.1 201 Created
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
ETag: "0x8DC43A5FDB8448F"
Location: https://free-demo-search-svc.search.windows.net:443/datasources('ny-philharmonic-ds')?api-version=2023-11-01
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 7ca53f73-1054-4959-bc1f-616148a9c74a
elapsed-time: 111
Date: Wed, 13 Mar 2024 21:38:58 GMT
Connection: close

{
  "@odata.context": "https://free-demo-search-svc.search.windows.net/$metadata#datasources/$entity",
  "@odata.etag": "\"0x8DC43A5FDB8448F\"",
  "name": "ny-philharmonic-ds",
  "description": null,
  "type": "azureblob",
  "subtype": null,
  "credentials": {
    "connectionString": null
  },
  "container": {
    "name": "ny-philharmonic-free",
    "query": null
  },
  "dataChangeDetectionPolicy": null,
  "dataDeletionDetectionPolicy": null,
  "encryptionKey": null
}

Index létrehozása

Az Index létrehozása (REST) létrehoz egy keresési indexet a keresési szolgáltatásban. Az index határozza meg az összes paramétert és ezek attribútumait.

Beágyazott JSON esetén az indexmezőknek meg kell egyezniük a forrásmezőkével. Az Azure AI Search jelenleg nem támogatja a beágyazott JSON-ra való mezőleképezést. Ezért a mezőneveknek és adattípusoknak teljesen egyeznie kell. Az alábbi index a nyers tartalom JSON-elemeihez igazodik.

### Create an index
POST {{baseUrl}}/indexes?api-version=2023-11-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
      "name": "ny-philharmonic-index",  
      "fields": [
        {"name": "programID", "type": "Edm.String", "key": true, "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
        {"name": "orchestra", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
        {"name": "season", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
        { "name": "concerts", "type": "Collection(Edm.ComplexType)", 
          "fields": [
            { "name": "eventType", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": false, "sortable": false, "facetable": false},
            { "name": "Location", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "sortable": false, "facetable": true },
            { "name": "Venue", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "sortable": false, "facetable": true },
            { "name": "Date", "type": "Edm.String", "searchable": false, "retrievable": true, "filterable": true, "sortable": false, "facetable": true },
            { "name": "Time", "type": "Edm.String", "searchable": false, "retrievable": true, "filterable": true, "sortable": false, "facetable": true }
          ]
        },
        { "name": "works", "type": "Collection(Edm.ComplexType)", 
          "fields": [
            { "name": "ID", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": false, "sortable": false, "facetable": false},
            { "name": "composerName", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "sortable": false, "facetable": true },
            { "name": "workTitle", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "sortable": false, "facetable": true },
            { "name": "conductorName", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "sortable": false, "facetable": true },
            { "name": "soloists", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true, "filterable": true, "sortable": false, "facetable": true }
          ]
        }
      ]
    }

Főbb pontok:

  • A mezőleképezések nem használhatók a mezőnevek és adattípusok közötti különbségek egyeztetésére. Ez az indexséma a nyers tartalom tükrözésére lett kialakítva.

  • A beágyazott JSON modellje a Collection(Edm.ComplextType). A nyers tartalomban minden szezonban több koncert, és minden koncerthez több mű is tartozik. A struktúra elhelyezéséhez használjon gyűjteményeket összetett típusokhoz.

  • A nyers tartalomban sztringek DateTime , így az index megfelelő adattípusai is sztringek.

Indexelő létrehozása és futtatása

Az Indexelő létrehozása létrehoz egy indexelőt a keresési szolgáltatásban. Az indexelő csatlakozik az adatforráshoz, betölti és indexeli az adatokat, és opcionálisan ütemezést biztosít az adatfrissítés automatizálásához.

Az indexelő konfigurációja magában foglalja az jsonArray elemzési módot és a documentRoot.

### Create and run an indexer
POST {{baseUrl}}/indexers?api-version=2023-11-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
      "name" : "ny-philharmonic-indexer",
      "dataSourceName" : "ny-philharmonic-ds",
      "targetIndexName" : "ny-philharmonic-index",
      "parameters" : { 
        "configuration" : { 
          "parsingMode" : "jsonArray", "documentRoot": "/programs"}
        },
      "fieldMappings" : [ 
      ]
    }

Főbb pontok:

  • A nyers tartalomfájl egy JSON-tömböt ("programs") tartalmaz 1526 beágyazott JSON-struktúrával. Úgy van jsonArray beállítvaparsingMode, hogy az indexelő közölje, hogy minden blob tartalmaz egy JSON-tömböt. Mivel a beágyazott JSON egy szinttel lejjebb indul, állítsa be documentRoot a következőt /programs: .

  • Az indexelő néhány percig fut. Várjon, amíg az indexelő végrehajtása befejeződik, mielőtt bármilyen lekérdezést futtat.

Lekérdezések futtatása

Az első dokumentum betöltése után azonnal megkezdheti a keresést.

### Query the index
POST {{baseUrl}}/indexes/ny-philharmonic-index/docs/search?api-version=2023-11-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}
  
  {
    "search": "*",
    "count": true
  }

Küldje el a kérést. Ez egy meghatározatlan teljes szöveges keresési lekérdezés, amely az indexben lekérdezhetőként megjelölt mezőket és a dokumentumok számát adja vissza. A válasznak így kell kinéznie:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: a95c4021-f7b4-450b-ba55-596e59ecb6ec
elapsed-time: 106
Date: Wed, 13 Mar 2024 22:09:59 GMT
Connection: close

{
  "@odata.context": "https://free-demo-search-svc.search.windows.net/indexes('ny-philharmonic-index')/$metadata#docs(*)",
  "@odata.count": 1521,
  "@search.nextPageParameters": {
    "search": "*",
    "count": true,
    "skip": 50
  },
  "value": [
  ],
  "@odata.nextLink": "https://free-demo-search-svc.search.windows.net/indexes/ny-philharmonic-index/docs/search?api-version=2023-11-01"
}

Adjon hozzá egy paramétert search a sztringben való kereséshez. Adjon hozzá egy paramétert select , amely kevesebb mezőre korlátozza az eredményeket. Adjon hozzá egy elemet filter a keresés további szűkítéséhez.

### Query the index
POST {{baseUrl}}/indexes/ny-philharmonic-index/docs/search?api-version=2023-11-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}
  
  {
    "search": "puccini",
    "count": true,
    "select": "season, concerts/Date, works/composerName, works/workTitle",
    "filter": "season gt '2015-16'"
  }

A válasz két dokumentumot ad vissza.

Szűrők esetén logikai operátorokat (és vagy nem) és összehasonlító operátorokat (eq, ne, gt, lt, ge, le) is használhat. A sztring-összehasonlítások megkülönböztetik a kis- és nagybetűket. További információkért és példákért lásd : Lekérdezés létrehozása.

Feljegyzés

A $filter paraméter csak az index létrehozásakor szűrhetőként megjelölt mezőkön működik.

Alaphelyzetbe állítás és ismételt futtatás

Az indexelőzmények alaphelyzetbe állíthatók, törölhetik a végrehajtási előzményeket, ami lehetővé teszi a teljes újrafuttatást. A következő GET-kérések alaphelyzetbe állításra, majd újrafuttatva jelennek meg.

### Reset the indexer
POST {{baseUrl}}/indexers/ny-philharmonic-indexer/reset?api-version=2023-11-01  HTTP/1.1
  api-key: {{apiKey}}
### Run the indexer
POST {{baseUrl}}/indexers/ny-philharmonic-indexer/run?api-version=2023-11-01  HTTP/1.1
  api-key: {{apiKey}}
### Check indexer status 
GET {{baseUrl}}/indexers/ny-philharmonic-indexer/status?api-version=2023-11-01  HTTP/1.1
  api-key: {{apiKey}}

Az erőforrások eltávolítása

Ha a saját előfizetésében dolgozik, a projekt végén célszerű eltávolítania a már nem szükséges erőforrásokat. A továbbra is futó erőforrások költségekkel járhatnak. Az erőforrásokat törölheti egyesével, vagy az erőforráscsoport törlésével eltávolíthatja a benne lévő összes erőforrást is.

A portálon törölheti az indexeket, indexelőket és adatforrásokat.

Következő lépések

Most, hogy megismerte az Azure Blob-indexelés alapjait, tekintsük meg közelebbről az Indexelő konfigurációját az Azure Storage-ban található JSON-blobokhoz.