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


Bővített kimenet leképezése egy keresési index mezőire az Azure AI Searchben

Indexelő szakaszai

Ez a cikk bemutatja, hogyan állíthat be kimeneti mezőleképezéseket, hogyan definiálhat adatelérési útvonalat a memóriabeli adatok között a képességkészlet feldolgozása során, és hogyan lehet célmezőket létrehozni egy keresési indexben. Az indexelő végrehajtása során a képességek által létrehozott információk csak a memóriában léteznek. Ha meg szeretné őrizni ezeket az adatokat egy keresési indexben, meg kell adnia az indexelőnek, hogy hová küldje az adatokat.

A kimeneti mezőleképezés egy indexelőben van definiálva, és a következő elemekkel rendelkezik:

"outputFieldMappings": [
  {
    "sourceFieldName": "document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],

A szó szerinti forrásmezők és az indexmezők közötti útvonalat leképező definícióval fieldMappings ellentétben a outputFieldMappings definíció a memórián belüli gazdagodásokat a keresési index mezőihez rendeli.

Előfeltételek

  • Indexelő, index, adatforrás és képességkészlet.

  • Az indexmezőknek egyszerűnek vagy legfelső szintűnek kell lenniük. Összetett típusra nem tud kimenetet adni, de ha összetett típussal rendelkezik, a kimeneti meződefinícióval egyesítheti az összetett típus egyes részeit, és elküldheti őket egy keresési indexben lévő gyűjteménybe.

Mikor érdemes kimeneti mezőleképezést használni?

A kimeneti mezők leképezésére akkor van szükség, ha az indexelő rendelkezik egy csatolt képességkészlettel , amely új információkat hoz létre az indexben. Ide sorolhatóak például a kövekezők:

  • Vektorok beágyazási képességekből
  • OCR-szöveg képfelismerési képességekből
  • Helyek, szervezetek vagy entitásfelismerő képességekből származó személyek

A kimeneti mezőleképezések a következőre is használhatók:

  • Hozzon létre több másolatot a létrehozott tartalomról (egy-a-többhöz kimeneti mezőleképezések).

  • A forrásdokumentum összetett típusának összesimítása. Tegyük fel például, hogy a forrásdokumentumok összetett típusúak, például többrészes címmel rendelkeznek, és csak a várost szeretné. A kimeneti mezőleképezéssel elsimíthatja a beágyazott adatstruktúrát, majd egy kimeneti mezőleképezéssel elküldheti a kimenetet egy sztringgyűjteménynek a keresési indexben.

A kimeneti mezőleképezések csak keresési indexekre vonatkoznak. Ha egy tudástárat hoz létre, használjon előrejelzéseket az adatútvonal konfigurálására.

Kimeneti mezőleképezés definiálása

A kimeneti mezőleképezések egy indexelő definícióban vannak hozzáadva a outputFieldMappings tömbhöz, általában a fieldMappings tömb után. A kimeneti mezők leképezése három részből áll.

A kimeneti mezőleképezések definiálásához használhatja a REST API-t vagy az Azure SDK-t.

Tipp.

Az Adatok importálása varázsló által létrehozott indexelők tartalmazzák a varázsló által létrehozott kimeneti mezőleképezéseket. Ha példákra van szüksége, futtassa a varázslót az adatforráson a kimeneti mező megfeleltetéseinek megtekintéséhez az indexelőben.

  1. Indexelő létrehozása, Indexelő létrehozása vagy frissítése vagy ezzel egyenértékű metódus használata egy Azure SDK-ban. Íme egy példa egy indexelő definíciójára.

    {
       "name": "myindexer",
       "description": null,
       "dataSourceName": "mydatasource",
       "targetIndexName": "myindex",
       "schedule": { },
       "parameters": { },
       "fieldMappings": [],
       "outputFieldMappings": [],
       "disabled": false,
       "encryptionKey": { }
     }
    
  2. Töltse ki a outputFieldMappings tömböt a leképezések megadásához. A mezőleképezés három részből áll.

    "outputFieldMappings": [
      {
        "sourceFieldName": "/document/path-to-a-node-in-an-enriched-document",
        "targetFieldName": "some-search-field-in-an-index",
        "mappingFunction": null
      }
    ]
    
    Tulajdonság Leírás
    sourceFieldName Szükséges. A bővített tartalom elérési útját adja meg. Ilyen lehet például a ./document/content Az elérési út szintaxisát és példáit az Azure AI Search-készségkészletben található referencia-bővítésekben tekintheti meg.
    targetFieldName Opcionális. Megadja a bővített tartalmat fogadó keresőmezőt. A célmezőknek felső szintű egyszerű mezőknek vagy gyűjteményeknek kell lenniük. Nem lehet egy összetett típusú almező elérési útja. Ha összetett struktúrában szeretne bizonyos csomópontokat lekérni, egyes csomópontokat egyesíthet a memóriában, majd elküldheti a kimenetet az index egy sztringgyűjteményének.
    mappingFunction Opcionális. Hozzáadja az indexelők által támogatott leképezési függvények által biztosított további feldolgozást. A bővítési csomópontok esetében a kódolás és a dekódolás a leggyakrabban használt függvény.
  3. A targetFieldName keresési indexben mindig a mező neve szerepel.

  4. Ez sourceFieldName egy csomópont elérési útja a bővített dokumentumban. Ez egy képesség kimenete. Az elérési út mindig a következővel /documentkezdődik, és ha egy blobból indexel, az elérési út /contentmásodik eleme. A harmadik elem a képesség által előállított érték. További információkért és példákért tekintse meg az Azure AI Search-képességek referenciáinak bővítését ismertető témakört.

    Ez a példa egy blob tartalomtulajdonságából kinyert entitásokat és hangulatfeliratokat ad hozzá a keresési index mezőihez.

    {
        "name": "myIndexer",
        "dataSourceName": "myDataSource",
        "targetIndexName": "myIndex",
        "skillsetName": "myFirstSkillSet",
        "fieldMappings": [],
        "outputFieldMappings": [
            {
                "sourceFieldName": "/document/content/organizations/*/description",
                "targetFieldName": "descriptions",
                "mappingFunction": {
                    "name": "base64Decode"
                }
            },
            {
                "sourceFieldName": "/document/content/organizations",
                "targetFieldName": "orgNames"
            },
            {
                "sourceFieldName": "/document/content/sentiment",
                "targetFieldName": "sentiment"
            }
        ]
    }
    
  5. Rendelje hozzá az indexben tárolt mezők tartalmának átalakításához szükséges leképezési függvényeket . A bővítési csomópontok esetében a kódolás és a dekódolás a leggyakrabban használt függvény.

Egy-a-többhöz kimeneti mező leképezése

A kimeneti mezőleképezéssel egyetlen forrásmezőt irányíthat egy keresési index több mezőjéhez. Ezt elvégezheti összehasonlítási teszteléshez, vagy ha különböző attribútumokkal rendelkező mezőket szeretne.

Tegyük fel, hogy egy képességkészlet beágyazást hoz létre egy vektormezőhöz, és egy olyan indexet, amely több vektormezővel rendelkezik, amelyek algoritmus és tömörítési beállítások szerint változnak. Az indexelőn belül képezheti le a beágyazási képesség kimenetét a keresési indexben lévő több vektormező mindegyikére.

"outputFieldMappings": [
    { "sourceFieldName" : "/document/content/text_vector", "targetFieldName" : "vector_hnsw" }, 
    { "sourceFieldName" : "/document/content/text_vector", "targetFieldName" : "vector_eknn" },
    { "sourceFieldName" : "/document/content/text_vector", "targetFieldName" : "vector_narrow" }, 
    { "sourceFieldName" : "/document/content/text_vector", "targetFieldName" : "vector_no_stored" },
    { "sourceFieldName" : "/document/content/text_vector", "targetFieldName" : "vector_scalar" }       
  ]

A forrásmező elérési útja a képességkimenet. Ebben a példában a kimenet a következő text_vector: . A célnév nem kötelező tulajdonság. Ha nem ad célnevet a kimeneti leképezésnek, az elérési út pontosabban vagy pontosabban /document/content/embeddingjelenik embedding meg.

{
  "name": "test-vector-size-ss",  
  "description": "Generate embeddings using AOAI",
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
      "name": "#1",
      "description": null,
      "context": "/document/content",
      "resourceUri": "https://my-demo-eastus.openai.azure.com",
      "apiKey": null,
      "deploymentId": "text-embedding-ada-002",
      "dimensions": 1536,
      "modelName": "text-embedding-ada-002",
      "inputs": [
        {
          "name": "text",
          "source": "/document/content"
        }
      ],
      "outputs": [
        {
          "name": "embedding",
          "targetName": "text_vector"
        }
      ],
      "authIdentity": null
    }
  ]
}

Összetett struktúrák összesimítása sztringgyűjteménybe

Ha a forrásadatok beágyazott vagy hierarchikus JSON-ból állnak, nem használhat mezőleképezéseket az adatelérési utak beállításához. Ehelyett a keresési indexnek tükröznie kell a forrásadat-struktúrát minden szinten a teljes importáláshoz.

Ez a szakasz végigvezeti egy olyan importálási folyamaton, amely egy-az-egyhez tükröz egy összetett dokumentumot a forrás- és a céloldalon egyaránt. Ezután ugyanazt a forrásdokumentumot használja az egyes csomópontok sztringgyűjteményekbe való beolvasásának és összesimításának szemléltetésére.

Íme egy példa egy beágyazott JSON-t tartalmazó dokumentumra az Azure Cosmos DB-ben:

{
   "palette":"primary colors",
   "colors":[
      {
         "name":"blue",
         "medium":[
            "acrylic",
            "oil",
            "pastel"
         ]
      },
      {
         "name":"red",
         "medium":[
            "acrylic",
            "pastel",
            "watercolor"
         ]
      },
      {
         "name":"yellow",
         "medium":[
            "acrylic",
            "watercolor"
         ]
      }
   ]
}

Ha teljes mértékben indexelni szeretné a fenti forrásdokumentumot, létrehozhat egy indexdefiníciót, amelyben a mezőnevek, szintek és típusok összetett típusként jelennek meg. Mivel a keresési index összetett típusai nem támogatják a mezőleképezéseket, az indexdefiníciónak tükröznie kell a forrásdokumentumot.

{
  "name": "my-test-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true},
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "colors", "type": "Collection(Edm.ComplexType)",
      "fields": [
        {
          "name": "name",
          "type": "Edm.String",
          "searchable": true,
          "retrievable": true
        },
        {
          "name": "medium",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "retrievable": true,
        }
      ]
    }
  ]
}

Íme egy minta indexelődefiníció, amely végrehajtja az importálást (figyelje meg, hogy nincsenek mezőleképezések és nincs készségkészlet).

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-test-index",

  "fieldMappings": [],
  "outputFieldMappings": []
}

Az eredmény a következő keresési mintadokumentum, az Azure Cosmos DB-ben az eredetihez hasonlóan.

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "colors": [
        {
          "name": "blue",
          "medium": [
            "acrylic",
            "oil",
            "pastel"
          ]
        },
        {
          "name": "red",
          "medium": [
            "acrylic",
            "pastel",
            "watercolor"
          ]
        },
        {
          "name": "yellow",
          "medium": [
            "acrylic",
            "watercolor"
          ]
        }
      ]
    }
  ]
}

A keresési indexek másik renderelése a forrás beágyazott struktúrájában lévő egyes csomópontok egy sztringgyűjteménybe való összesimítása a keresési indexben.

A feladat elvégzéséhez szüksége lesz egy outputFieldMappings olyan csomópontra, amely leképez egy memórián belüli csomópontot egy sztringgyűjteményre az indexben. Bár a kimeneti mezőleképezések elsősorban a képességkimenetekre vonatkoznak, használhatja őket csomópontok kezelésére is a "dokumentumrepedés" után, ahol az indexelő megnyitja a forrásdokumentumot, és beolvassa a memóriába.

Az alábbiakban egy indexdefiníció minta látható, amely sztringgyűjteményeket használ az összesimított kimenet fogadásához:

{
  "name": "my-new-flattened-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true },
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "color_names", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true },
    { "name": "color_mediums", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true}
  ]
}

Íme a minta indexelődefiníció, amellyel outputFieldMappings a beágyazott JSON társítható a sztringgyűjtemény mezőihez. Figyelje meg, hogy a forrásmező az elérési út szintaxisát használja a bővítési csomópontokhoz, még akkor is, ha nincs készségkészlet. A dokumentumok feltörése során a rendszer bővített dokumentumokat hoz létre a rendszerben, ami azt jelenti, hogy az egyes dokumentumfák csomópontjai mindaddig elérhetők, amíg ezek a csomópontok a dokumentum feltörésekor léteznek.

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-new-flattened-index",
  "parameters": {  },
  "fieldMappings": [   ],
  "outputFieldMappings": [
    {
       "sourceFieldName": "/document/colors/*/name",
       "targetFieldName": "color_names"
    },
    {
       "sourceFieldName": "/document/colors/*/medium",
       "targetFieldName": "color_mediums"
    }
  ]
}

A fenti definíció eredményei a következők. A struktúra egyszerűsítése ebben az esetben elveszíti a kontextust. Már nincs társítás egy adott szín és a rendelkezésre álló médiumok között. A forgatókönyvtől függően azonban az alábbihoz hasonló eredmény lehet pontosan az, amire szüksége lehet.

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "color_names": [
        "blue",
        "red",
        "yellow"
      ],
      "color_mediums": [
        "[\"acrylic\",\"oil\",\"pastel\"]",
        "[\"acrylic\",\"pastel\",\"watercolor\"]",
        "[\"acrylic\",\"watercolor\"]"
      ]
    }
  ]
}

Lásd még