Dela via


Referera till en sökväg till berikade noder med hjälp av kontext- och källegenskaper en Azure AI Search-kompetensuppsättning

Under körningen av kunskapsuppsättningen skapar motorn ett minnesinternt berikande träd som samlar in varje berikning, till exempel identifierade entiteter eller översatt text. I den här artikeln får du lära dig hur du refererar till en berikningsnod i berikningsträdet så att du kan skicka utdata till underordnade kunskaper eller ange en mappning av utdatafält för ett sökindexfält.

Den här artikeln använder exempel för att illustrera olika scenarier. Fullständig syntax finns i Språkspråk för kunskapskontext och indataanteckning.

Bakgrundsbegrepp

Innan vi granskar syntaxen ska vi gå tillbaka till några viktiga begrepp för att bättre förstå exemplen som ges senare i den här artikeln.

Period beskrivning
"berikat dokument" Ett berikat dokument är en minnesintern struktur som samlar in kunskapsutdata när det skapas och innehåller alla berikanden som är relaterade till ett dokument. Tänk på ett berikat dokument som ett träd. I allmänhet börjar trädet på rotdokumentnivå och varje ny berikning skapas från en tidigare som dess underordnade.
"nod" I ett berikat dokument skapas en nod (kallas ibland för en "anteckning") och fylls i av en färdighet, till exempel "text" och "layoutText" i OCR-färdigheten. Ett berikat dokument fylls i med både berikningar och ursprungliga källfältvärden eller metadata som kopieras från källan.
"kontext" Omfattningen av berikning, som antingen är hela dokumentet, en del av ett dokument eller om du arbetar med bilder, de extraherade bilderna från ett dokument. Som standard är berikningskontexten på nivån "/document" , begränsad till enskilda dokument som finns i datakällan. När en färdighet körs blir utdata från den färdigheten egenskaper för den definierade kontexten.

Sökvägar för olika scenarier

Sökvägar anges i egenskaperna "kontext" och "källa" för en kompetensuppsättning och i utdatafältets mappningar i en indexerare.

Skärmbild av en definition av kompetensuppsättningen med kontext- och källelement markerade.

Exemplet i skärmbilden visar sökvägen för ett objekt i en Azure Cosmos DB-samling.

  • context sökvägen beror /document/HotelId på att samlingen partitioneras i dokument av fältet /HotelId .

  • source sökvägen beror /document/Description på att färdigheten är en översättningsfärdighet, och det fält som du vill att färdigheten ska översätta är fältet Description i varje dokument.

Alla sökvägar börjar med /document. Ett berikat dokument skapas i fasen "dokumentsprickning" i indexerarens körning, när indexeraren öppnar ett dokument eller läser på en rad från datakällan. Till en början är den enda noden i ett berikat dokument rotnoden (/document), och det är den nod som alla andra berikningar inträffar från.

Följande lista innehåller flera vanliga exempel:

  • /document är rotnoden och anger en hel blob i Azure Storage eller en rad i en SQL-tabell.
  • /document/{key} är syntaxen för ett dokument eller objekt i en Azure Cosmos DB-samling, där {key} är den faktiska nyckeln, till exempel /document/HotelId i föregående exempel.
  • /document/content anger egenskapen "innehåll" för en JSON-blob.
  • /document/{field} är syntaxen för en åtgärd som utförs i ett visst fält, till exempel översättning av /document/Description fältet, som visas i föregående exempel.
  • /document/pages/* eller /document/sentences/* blir kontexten om du delar upp ett stort dokument i mindre segment för bearbetning. Om "kontext" är /document/pages/*körs färdigheten en gång över varje sida i dokumentet. Eftersom det kan finnas mer än en sida eller mening lägger /* du till för att fånga dem alla.
  • /document/normalized_images/* skapas under dokumentsprickor om dokumentet innehåller bilder. Alla sökvägar till bilder börjar med normalized_images. Eftersom det ofta finns flera bilder inbäddade i ett dokument lägger du till /*.

Exempel i resten av den här artikeln baseras på fältet "innehåll" som genereras automatiskt av Azure Blob-indexerare som en del av dokumentets sprickfas. När du refererar till dokument från en blobcontainer använder du ett format som "/document/content", där fältet "innehåll" är en del av "dokumentet".

Exempel 1: Enkel anteckningsreferens

Anta att du har en mängd olika filer som innehåller referenser till personers namn som du vill extrahera med hjälp av entitetsigenkänning i Azure Blob Storage. I följande kompetensdefinition "/document/content" är textrepresentationen av hela dokumentet, och "people" är en extrahering av fullständiga namn för entiteter som identifierats som personer.

Eftersom standardkontexten är "/document"kan listan över personer nu refereras till som "/document/people". I det här specifika fallet "/document/people" är en anteckning, som nu kan mappas till ett fält i ett index eller användas i en annan färdighet i samma kompetensuppsättning.

  {
    "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
    "categories": [ "Person"],
    "defaultLanguageCode": "en",
    "inputs": [
      {
        "name": "text",
        "source": "/document/content"
      }
    ],
    "outputs": [
      {
        "name": "persons",
        "targetName": "people"
      }
    ]
  }

Exempel 2: Referera till en matris i ett dokument

Det här exemplet bygger på det föregående och visar hur du anropar ett berikningssteg flera gånger över samma dokument. Anta att föregående exempel genererade en matris med strängar med 10 namn från ett enda dokument. Ett rimligt nästa steg kan vara en andra berikning som extraherar efternamnet från ett fullständigt namn. Eftersom det finns 10 namn vill du att det här steget ska anropas 10 gånger i det här dokumentet, en gång för varje person.

Om du vill anropa rätt antal iterationer anger du kontexten som "/document/people/*", där asterisken ("*") representerar alla noder i det berikade dokumentet som underordnade "/document/people"till . Även om den här färdigheten bara definieras en gång i kunskapsmatrisen anropas den för varje medlem i dokumentet tills alla medlemmar bearbetas.

  {
    "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
    "description": "Fictitious skill that gets the last name from a full name",
    "uri": "http://names.azurewebsites.net/api/GetLastName",
    "context" : "/document/people/*",
    "defaultLanguageCode": "en",
    "inputs": [
      {
        "name": "fullname",
        "source": "/document/people/*"
      }
    ],
    "outputs": [
      {
        "name": "lastname",
        "targetName": "last"
      }
    ]
  }

När anteckningar är matriser eller samlingar med strängar kanske du vill rikta in dig på specifika medlemmar i stället för matrisen som helhet. Exemplet ovan genererar en anteckning som anropas "last" under varje nod som representeras av kontexten. Om du vill referera till den här serien med anteckningar kan du använda syntaxen "/document/people/*/last". Om du vill referera till en viss anteckning kan du använda ett explicit index: "/document/people/1/last" för att referera till efternamnet på den första person som identifieras i dokumentet. Observera att i dessa syntaxmatriser är "0 indexerade".

Exempel 3: Referensmedlemmar i en matris

Ibland måste du gruppera alla anteckningar av en viss typ för att skicka dem till en viss färdighet. Överväg en hypotetisk anpassad färdighet som identifierar det vanligaste efternamnet från alla efternamn som extraheras i exempel 2. Om du bara vill ange efternamnen för den anpassade färdigheten anger du kontexten som "/document" och indata som "/document/people/*/lastname".

Observera att kardinaliteten "/document/people/*/lastname" för är större än dokumentets. Det kan finnas 10 noder för efternamn medan det bara finns en dokumentnod för det här dokumentet. I så fall skapar systemet automatiskt en matris "/document/people/*/lastname" med innehållande alla element i dokumentet.

  {
    "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
    "description": "Fictitious skill that gets the most common string from an array of strings",
    "uri": "http://names.azurewebsites.net/api/MostCommonString",
    "context" : "/document",
    "inputs": [
      {
        "name": "strings",
        "source": "/document/people/*/lastname"
      }
    ],
    "outputs": [
      {
        "name": "mostcommon",
        "targetName": "common-lastname"
      }
    ]
  }

Tips för felsökning av anteckningssökväg

Om du har problem med att ange kunskapsindata kan de här tipsen hjälpa dig att gå vidare:

  • Kör guiden Importera data över dina data för att granska de definitioner av kompetensuppsättningar och fältmappningar som guiden genererar.

  • Starta en felsökningssession på en kompetensuppsättning för att visa strukturen för ett berikat dokument. Du kan redigera sökvägarna och andra delar av kunskapsdefinitionen och sedan köra färdigheten för att verifiera dina ändringar.

Se även