Mappa berikade utdata till fält i ett sökindex i Azure Cognitive Search
Den här artikeln beskriver hur du konfigurerar mappningar av utdatafält som bestämmer en datasökväg mellan minnesinterna datastrukturer som skapats under kompetensbearbetningen och målfält i ett sökindex. En mappning av utdatafält definieras i en indexerare och har följande element:
"outputFieldMappings": [
{
"sourceFieldName": "document/path-to-a-node-in-an-enriched-document",
"targetFieldName": "some-search-field-in-an-index",
"mappingFunction": null
}
],
Till skillnad från en fieldMappings
definition som mappar en sökväg mellan två fysiska datastrukturer mappar en outputFieldMappings
definition minnesintern data till fält i ett sökindex.
Mappningar av utdatafält krävs om indexeraren har en bifogad kompetensuppsättning som skapar ny information, till exempel textöversättning eller extrahering av nyckelfraser. Under indexeringskörningen finns AI-genererad information endast i minnet. Om du vill spara den här informationen i ett sökindex måste du tala om för indexeraren var data ska skickas.
Mappningar av utdatafält kan också användas för att hämta specifika noder i ett källdokuments komplexa typ. Du kanske till exempel bara vill ha "FullName/LastName" i egenskapen FullName i flera delar. När du inte behöver den fullständiga komplexa strukturen kan du platta ut enskilda noder i en kapslad datastruktur och sedan använda en mappning av utdatafält för att skicka utdata till en strängsamling i sökindexet.
Mappningar av utdatafält gäller för:
Minnesinternt innehåll som skapas av färdigheter eller extraheras av en indexerare. Källfältet är en nod i ett berikat dokumentträd.
Sök index. Om du fyller i ett kunskapslager använder du projektioner för konfiguration av datasökväg.
Mappningar av utdatafält tillämpas efter körningen av kunskapsuppsättningen eller efter dokumentsprickor om det inte finns någon associerad kompetensuppsättning.
Definiera en mappning av utdatafält
Mappningar av utdatafält läggs till i matrisen outputFieldMappings
i en indexeraredefinition, som vanligtvis placeras efter matrisen fieldMappings
. En mappning av utdatafält består av tre delar.
"fieldMappings": []
"outputFieldMappings": [
{
"sourceFieldName": "/document/path-to-a-node-in-an-enriched-document",
"targetFieldName": "some-search-field-in-an-index",
"mappingFunction": null
}
],
Egenskap | Beskrivning |
---|---|
sourceFieldName | Krävs. Anger en sökväg till berikat innehåll. Ett exempel kan vara /document/content . Se Referensanteckningar i en Azure Cognitive Search kompetensuppsättning för sökvägssyntax och exempel. |
targetFieldName | Valfritt. Anger det sökfält som tar emot det berikade innehållet. Målfält måste vara enkla fält eller samlingar på den översta nivån. Det kan inte vara en sökväg till ett underfält i en komplex typ. Om du vill hämta specifika noder i en komplex struktur kan du platta ut enskilda noder i minnet och sedan skicka utdata till en strängsamling i indexet. |
mappingFunction | Valfritt. Lägger till extra bearbetning som tillhandahålls av mappningsfunktioner som stöds av indexerare. När det gäller berikningsnoder är kodning och avkodning de vanligaste funktionerna. |
Du kan använda REST-API:et eller en Azure SDK för att definiera mappningar av utdatafält.
Tips
Indexerare som skapats av guiden Importera data innehåller mappningar av utdatafält som genereras av guiden. Om du behöver exempel kör du guiden över datakällan för att se den renderade definitionen.
Använd Create Indexer (REST) eller Update Indexer (REST), valfri API-version.
I det här exemplet läggs entiteter och sentimentetiketter som extraherats från en blobs innehållsegenskap till fält i ett sökindex.
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"
}
]
}
För varje mappning av utdatafält anger du platsen för data i det berikade dokumentträdet (sourceFieldName) och namnet på fältet som det refereras till i indexet (targetFieldName). Tilldela alla mappningsfunktioner som du behöver för att transformera innehållet i ett fält innan det lagras i indexet.
Platta ut komplexa strukturer till en strängsamling
Om dina källdata består av kapslad eller hierarkisk JSON kan du inte använda fältmappningar för att konfigurera datasökvägarna. I stället måste sökindexet spegla källdatastrukturen för på varje nivå för en fullständig import.
Det här avsnittet vägleder dig genom en importprocess som skapar en en-till-en-återspegling av ett komplext dokument på både käll- och målsidan. Därefter används samma källdokument för att illustrera hämtning och utplattande av enskilda noder i strängsamlingar.
Här är ett exempel på ett dokument i Azure Cosmos DB med kapslad JSON:
{
"palette":"primary colors",
"colors":[
{
"name":"blue",
"medium":[
"acrylic",
"oil",
"pastel"
]
},
{
"name":"red",
"medium":[
"acrylic",
"pastel",
"watercolor"
]
},
{
"name":"yellow",
"medium":[
"acrylic",
"watercolor"
]
}
]
}
Om du vill indexisera källdokumentet ovan fullständigt skulle du skapa en indexdefinition där fältnamnen, nivåerna och typerna återspeglas som en komplex typ. Eftersom fältmappningar inte stöds för komplexa typer i sökindexet måste indexdefinitionen spegla källdokumentet.
{
"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,
}
]
}
]
}
Här är en exempelindexeringsdefinition som kör importen (observera att det inte finns några fältmappningar och ingen kompetensuppsättning).
{
"name": "my-test-indexer",
"dataSourceName": "my-test-ds",
"skillsetName": null,
"targetIndexName": "my-test-index",
"fieldMappings": [],
"outputFieldMappings": []
}
Resultatet är följande exempelsökningsdokument, som liknar originalet i 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"
]
}
]
}
]
}
En alternativ återgivning i ett sökindex är att platta ut enskilda noder i källans kapslade struktur till en strängsamling i ett sökindex.
För att utföra den här uppgiften behöver du en outputFieldMapping
som mappar en minnesintern nod till en strängsamling i indexet. Även om mappningar av utdatafält främst gäller för kunskapsutdata, kan du också använda dem för att adressera noder efter "dokumentknäckning" där indexeraren öppnar ett källdokument och läser det i minnet.
Nedan visas en exempelindexdefinition i Cognitive Search som använder strängsamlingar för att ta emot utdata som är utplattade:
{
"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}
]
}
Här är exempelindexeringsdefinitionen som används outputFieldMappings
för att associera den kapslade JSON:en med strängsamlingsfälten. Observera att källfältet använder sökvägssyntaxen för berikningsnoder, även om det inte finns någon kompetensuppsättning. Berikade dokument skapas i systemet under dokumentknäckning, vilket innebär att du kan komma åt noder i varje dokumentträd så länge dessa noder finns när dokumentet har spruckit.
{
"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"
}
]
}
Resultatet från definitionen ovan är följande. Om du förenklar strukturen förloras kontexten i det här fallet. Det finns inte längre några associationer mellan en viss färg och de medier som den är tillgänglig i. Beroende på ditt scenario kan dock ett resultat som liknar det som visas nedan vara exakt det du behöver.
{
"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\"]"
]
}
]
}