Verrijkte uitvoer toewijzen aan velden in een zoekindex in Azure AI Search

Indexeerfasen

In dit artikel wordt uitgelegd hoe u uitvoerveldtoewijzingen instelt, een gegevenspad definieert tussen gegevensstructuren in het geheugen die zijn gemaakt tijdens het verwerken van vaardighedensets en doelvelden in een zoekindex. Een uitvoerveldtoewijzing wordt gedefinieerd in een indexeerfunctie en heeft de volgende elementen:

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

In tegenstelling tot een fieldMappings definitie waarmee een pad tussen twee fysieke gegevensstructuren wordt toegewezen, outputFieldMappings worden in het geheugen verrijkingen toegewezen aan velden in een zoekindex.

Uitvoerveldtoewijzingen zijn vereist als uw indexeerfunctie een gekoppelde vaardighedenset heeft waarmee nieuwe informatie wordt gemaakt, zoals tekstomzetting of sleuteltermextractie. Tijdens de uitvoering van de indexeerfunctie bestaat alleen ai-gegenereerde informatie in het geheugen. Als u deze informatie in een zoekindex wilt behouden, moet u de indexeerfunctie laten weten waar de gegevens moeten worden verzonden.

Uitvoerveldtoewijzingen kunnen ook worden gebruikt om specifieke knooppunten op te halen in het complexe type van een brondocument. U wilt bijvoorbeeld alleen 'FullName/LastName' in een eigenschap 'FullName' met meerdere delen. Wanneer u de volledige complexe structuur niet nodig hebt, kunt u afzonderlijke knooppunten platmaken in een geneste gegevensstructuren en vervolgens een uitvoerveldtoewijzing gebruiken om de uitvoer naar een tekenreeksverzameling in uw zoekindex te verzenden.

Uitvoerveldtoewijzingen zijn van toepassing op:

  • In-memory inhoud die is gemaakt door vaardigheden of geëxtraheerd door een indexeerfunctie. Het bronveld is een knooppunt in een verrijkte documentstructuur.

  • Zoekindexen. Als u een kennisarchief invult, gebruikt u projecties voor de configuratie van het gegevenspad. Als u vectorvelden invult, worden uitvoerveldtoewijzingen niet gebruikt.

Uitvoerveldtoewijzingen worden toegepast na de uitvoering van de vaardighedenset of na het kraken van documenten als er geen gekoppelde vaardighedenset is.

Een toewijzing van uitvoervelden definiëren

Uitvoerveldtoewijzingen worden toegevoegd aan de outputFieldMappings matrix in een indexeerfunctiedefinitie, meestal geplaatst na de fieldMappings matrix. Een uitvoerveldtoewijzing bestaat uit drie delen.

"fieldMappings": []
"outputFieldMappings": [
  {
    "sourceFieldName": "/document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],
Eigenschappen Beschrijving
sourceFieldName Vereist. Hiermee geeft u een pad naar verrijkte inhoud. Een voorbeeld hiervan kan zijn /document/content. Zie Referentieverrijkingen in een Azure AI Search-vaardighedenset voor padsyntaxis en voorbeelden.
targetFieldName Optioneel. Hiermee geeft u het zoekveld op dat de verrijkte inhoud ontvangt. Doelvelden moeten eenvoudige velden of verzamelingen op het hoogste niveau zijn. Het kan geen pad naar een subveld in een complex type zijn. Als u specifieke knooppunten in een complexe structuur wilt ophalen, kunt u afzonderlijke knooppunten in het geheugen platmaken en vervolgens de uitvoer verzenden naar een tekenreeksverzameling in uw index.
mappingFunction Optioneel. Voegt extra verwerking toe die wordt geleverd door toewijzingsfuncties die worden ondersteund door indexeerfuncties. Voor verrijkingsknooppunten zijn codering en decodering de meest gebruikte functies.

U kunt de REST API of een Azure SDK gebruiken om veldtoewijzingen voor uitvoer te definiëren.

Tip

Indexeerfuncties die door de wizard Gegevens importeren zijn gemaakt, bevatten uitvoerveldtoewijzingen die door de wizard worden gegenereerd. Als u voorbeelden nodig hebt, voert u de wizard uit via uw gegevensbron om de weergegeven definitie te zien.

Gebruik Indexeerfunctie (REST) maken of Indexeerfunctie (REST) bijwerken, elke API-versie.

In dit voorbeeld worden entiteiten en sentimentlabels toegevoegd die zijn geëxtraheerd uit de inhoudseigenschap van een blob aan velden in een zoekindex.

PUT https://[service name].search.windows.net/indexers/myindexer?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
    "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"
        }
    ]
}

Voor elke toewijzing van uitvoervelden stelt u de locatie van de gegevens in de verrijkte documentstructuur (sourceFieldName) en de naam van het veld in zoals wordt verwezen in de index (targetFieldName). Wijs toewijzingsfuncties toe die nodig zijn om de inhoud van een veld te transformeren voordat deze in de index wordt opgeslagen.

Complexe structuren plat maken in een tekenreeksverzameling

Als uw brongegevens bestaan uit geneste of hiërarchische JSON, kunt u geen veldtoewijzingen gebruiken om de gegevenspaden in te stellen. In plaats daarvan moet uw zoekindex de brongegevensstructuur spiegelen voor elk niveau voor een volledige import.

In deze sectie wordt u begeleid bij een importproces dat een een-op-een weerspiegeling van een complex document aan zowel de bron- als de doelzijde produceert. Vervolgens wordt hetzelfde brondocument gebruikt om het ophalen en afvlakken van afzonderlijke knooppunten in tekenreeksverzamelingen te illustreren.

Hier volgt een voorbeeld van een document in Azure Cosmos DB met geneste JSON:

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

Als u het bovenstaande brondocument volledig wilt indexeren, maakt u een indexdefinitie waarin de veldnamen, niveaus en typen worden weergegeven als een complex type. Omdat veldtoewijzingen niet worden ondersteund voor complexe typen in de zoekindex, moet uw indexdefinitie het brondocument spiegelen.

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

Hier volgt een voorbeeld van een indexeerfunctiedefinitie waarmee het importeren wordt uitgevoerd (u ziet dat er geen veldtoewijzingen en geen vaardighedenset zijn).

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

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

Het resultaat is het volgende voorbeeldzoekdocument, vergelijkbaar met het origineel in Azure Cosmos DB.

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

Een alternatieve rendering in een zoekindex is het plat maken van afzonderlijke knooppunten in de geneste structuur van de bron in een tekenreeksverzameling in een zoekindex.

Als u deze taak wilt uitvoeren, hebt u een outputFieldMappings knooppunt in het geheugen toegewezen aan een tekenreeksverzameling in de index. Hoewel uitvoerveldtoewijzingen voornamelijk van toepassing zijn op uitvoer van vaardigheden, kunt u ze ook gebruiken om knooppunten te adresseren na 'document kraken' waar de indexeerfunctie een brondocument opent en in het geheugen leest.

Hieronder ziet u een voorbeeld van een indexdefinitie, waarbij u tekenreeksverzamelingen gebruikt om platte uitvoer te ontvangen:

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

Hier volgt de definitie van de voorbeeldindexeerfunctie, waarbij outputFieldMappings u de geneste JSON koppelt aan de tekenreeksverzamelingsvelden. U ziet dat het bronveld gebruikmaakt van de padsyntaxis voor verrijkingsknooppunten, ook al is er geen vaardighedenset. Verrijkte documenten worden in het systeem gemaakt tijdens het kraken van documenten, wat betekent dat u toegang hebt tot knooppunten in elke documentstructuur, zolang deze knooppunten bestaan wanneer het document wordt gekraakt.

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

De resultaten van de bovenstaande definitie zijn als volgt. Het vereenvoudigen van de structuur verliest in dit geval context. Er zijn geen verbanden meer tussen een bepaalde kleur en de mediums waarin deze beschikbaar is. Afhankelijk van uw scenario is een resultaat dat vergelijkbaar is met het resultaat dat hieronder wordt weergegeven, mogelijk precies wat u nodig hebt.

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

Zie ook