Lägga till bedömningsprofiler i ett sökindex
För fulltextsökningsfrågor beräknar sökmotorn en sökpoäng för varje matchande dokument, vilket gör att resultat kan rangordnas från högt till lågt. Azure Cognitive Search använder en standardbedömningsalgoritm för att beräkna en inledande poäng, men du kan anpassa beräkningen via en bedömningsprofil.
Bedömningsprofiler bäddas in i indexdefinitioner och innehåller egenskaper för att öka poängen för matchningar, där ytterligare kriterier som finns i profilen ger ökad logik. Du kanske till exempel vill öka matchningarna baserat på deras intäktspotential, höja upp nyare objekt eller kanske höja upp objekt som har varit i lager för länge.
Är du inte bekant med relevansbegrepp? Följande videosegment går snabbt vidare till hur bedömningsprofiler fungerar i Azure Cognitive Search, men videon tar även upp grundläggande begrepp. Du kanske också vill granska likhetsr rangordning och bedömning för mer bakgrund.
Vad är en bedömningsprofil?
En bedömningsprofil är en del av indexdefinitionen och består av viktade fält, funktioner och parametrar. Syftet med en bedömningsprofil är att öka eller förstärka matchande dokument baserat på kriterier som du anger.
Följande definition visar en enkel profil med namnet "geo". Det här förbättrar resultat som har söktermen i fältet hotelName. Den använder också funktionen distance för att prioritera resultat som ligger inom tio kilometer från den aktuella platsen. Om någon söker på termen "inn" och "inn" råkar vara en del av hotellnamnet visas dokument som innehåller hotell med "inn" inom en radie på 10 KM från den aktuella platsen högre upp i sökresultaten.
"scoringProfiles": [
{
"name":"geo",
"text": {
"weights": {
"hotelName": 5
}
},
"functions": [
{
"type": "distance",
"boost": 5,
"fieldName": "location",
"interpolation": "logarithmic",
"distance": {
"referencePointParameter": "currentLocation",
"boostingDistance": 10
}
}
]
}
]
Om du vill använda den här bedömningsprofilen formuleras frågan för att ange parametern scoringProfile i begäran.
POST /indexes/hotels/docs&api-version=2020-06-30
{
"search": "inn",
"scoringProfile": "geo",
"scoringParameter": currentLocation--122.123,44.77233
}
Den här frågan söker efter termen "inn" och skickar in den aktuella platsen. Observera att den här frågan innehåller andra parametrar, till exempel scoringParameter. Frågeparametrar beskrivs i Sök efter dokument (REST API).
Se det utökade exemplet för att granska ett mer detaljerat exempel på en bedömningsprofil.
Hur poäng beräknas
Poängen beräknas för fulltextsökningsfrågor i syfte att rangordna de mest relevanta matchningarna och returnera dem överst i svaret. Övergripande poäng för varje dokument är en sammanställning av de enskilda poängen för varje fält, där de enskilda poängen för varje fält beräknas baserat på termfrekvensen och dokumentfrekvensen för de söktermer i fältet (kallas TF-IDF eller termfrekvens för inverterad dokumentfrekvens).
Tips
Du kan använda parametern featuresMode för att begära ytterligare bedömningsinformation med sökresultaten (inklusive poäng på fältnivå).
När du ska lägga till bedömningslogik
Du bör skapa en eller flera bedömningsprofiler när standardbeteendet för rangordning inte går tillräckligt långt för att uppfylla dina affärsmål. Du kan till exempel bestämma att sökrelevans ska prioritera nyligen tillagda objekt. På samma sätt kan du ha ett fält som innehåller vinstmarginal eller något annat fält som anger intäktspotential. Att förbättra resultat som är mer meningsfullt för användarna eller verksamheten är ofta den avgörande faktorn vid implementering av bedömningsprofiler.
Relevansbaserad ordning på en söksida implementeras också via bedömningsprofiler. Överväg sökresultatsidor som du har använt tidigare och som gör att du kan sortera efter pris, datum, klassificering eller relevans. I Azure Cognitive Search kan bedömningsprofiler användas för att driva relevansalternativet. Definitionen av relevans styrs av dig, vilket anger affärsmål och vilken typ av sökupplevelse du vill leverera.
Utökat exempel
I följande exempel visas schemat för ett index med två bedömningsprofiler ( boostGenre , newAndHighlyRated ). Alla frågor mot det här indexet som innehåller någon av profilerna som en frågeparameter använder profilen för att poängse resultatuppsättningen.
Profilen boostGenre använder viktade textfält, vilket ökar matchningar som finns i fälten rockTitle, genre och artistName. Fälten ökas med 1,5, 5 respektive 2. Varför ökar genren så mycket högre än de andra? Om sökningen utförs över data som är något homogena (som är fallet med "genre" i musicstoreindex) kan du behöva en större avvikelse i de relativa vikterna. I musicstoreindex visas till exempel "rock" både som en genre och i identiskt formulerade genrebeskrivningar. Om du vill att genren ska uppväga genrebeskrivningen behöver genrefältet en mycket högre relativ vikt.
{
"name": "musicstoreindex",
"fields": [
{ "name": "key", "type": "Edm.String", "key": true },
{ "name": "albumTitle", "type": "Edm.String" },
{ "name": "albumUrl", "type": "Edm.String", "filterable": false },
{ "name": "genre", "type": "Edm.String" },
{ "name": "genreDescription", "type": "Edm.String", "filterable": false },
{ "name": "artistName", "type": "Edm.String" },
{ "name": "orderableOnline", "type": "Edm.Boolean" },
{ "name": "rating", "type": "Edm.Int32" },
{ "name": "tags", "type": "Collection(Edm.String)" },
{ "name": "price", "type": "Edm.Double", "filterable": false },
{ "name": "margin", "type": "Edm.Int32", "retrievable": false },
{ "name": "inventory", "type": "Edm.Int32" },
{ "name": "lastUpdated", "type": "Edm.DateTimeOffset" }
],
"scoringProfiles": [
{
"name": "boostGenre",
"text": {
"weights": {
"albumTitle": 1.5,
"genre": 5,
"artistName": 2
}
}
},
{
"name": "newAndHighlyRated",
"functions": [
{
"type": "freshness",
"fieldName": "lastUpdated",
"boost": 10,
"interpolation": "quadratic",
"freshness": {
"boostingDuration": "P365D"
}
},
{
"type": "magnitude",
"fieldName": "rating",
"boost": 10,
"interpolation": "linear",
"magnitude": {
"boostingRangeStart": 1,
"boostingRangeEnd": 5,
"constantBoostBeyondRange": false
}
}
]
}
],
"suggesters": [
{
"name": "sg",
"searchMode": "analyzingInfixMatching",
"sourceFields": [ "albumTitle", "artistName" ]
}
]
}
Steg för att lägga till en bedömningsprofil
Om du vill implementera anpassat bedömningsbeteende lägger du till en bedömningsprofil i schemat som definierar indexet. Du kan ha upp till 100 bedömningsprofiler inom ett index (se Tjänstbegränsningar),men du kan bara ange en profil åt gången i en viss fråga.
Börja med en indexdefinition. Du kan lägga till och uppdatera bedömningsprofiler i ett befintligt index utan att behöva återskapa det. Använd en begäran om uppdateringsindex för att publicera ändringen.
Klistra in mallen i det här avsnittet.
Ange ett namn. Bedömningsprofiler är valfria, men om du lägger till en krävs namnet. Se till att följa Cognitive Search namngivningskonventioner för fält (börjar med en bokstav, undviker specialtecken och reserverade ord).
Ange ökningskriterier. En enskild profil kan innehålla viktade fält, funktionereller båda.
Du bör arbeta iterativt med hjälp av en datauppsättning som hjälper dig att bevisa eller motbevisa effektiviteten hos en viss profil.
Bedömningsprofiler kan definieras i Azure Portal som du ser i följande skärmbild, eller programmässigt via REST-API:er eller i Azure SDK:er, till exempel klassen ScoringProfile i Azure SDK för .NET.
Använda viktade fält
Använd viktade fält när fältkontext är viktigt och frågor är fulltextsökning (även kallat textsökning i fritt format). Om en fråga till exempel innehåller termen "airport" kanske du vill att "airport" i fältet Beskrivning ska ha mer vikt än i HotelName.
Viktade fält består av ett sökbart fält och ett positivt tal som används som multiplikator. Om den ursprungliga fältpoängen för HotelName är 3 blir det ökade resultatet för fältet 6, vilket bidrar till en högre övergripande poäng för själva det överordnade dokumentet.
"scoringProfiles": [
{
"name": "boostKeywords",
"text": {
"weights": {
"HotelName": 2,
"Description": 5
}
}
}
Använda funktioner
Använd funktioner när enkla relativa vikter inte är tillräckliga eller inte gäller, som när det gäller avstånd och färskhet, som är beräkningar över numeriska data. Du kan ange flera funktioner per bedömningsprofil.
| Funktion | Beskrivning |
|---|---|
| "freshness" | Ökar med värden i ett datetime-fält (Edm.DateTimeOffset). Den här funktionen har boostingDuration ett attribut så att du kan ange ett värde som representerar ett tidsspann över vilket ökning sker. |
| "magnitude" | Ökar baserat på hur högt eller lågt ett numeriskt värde är. Scenarier som kräver den här funktionen är att öka med vinstmarginal, högsta pris, lägsta pris eller antal nedladdningar. Den här funktionen kan bara användas med Edm.Double och Edm.Int fält. För funktionen magnitude kan du ändra intervallet högt till lågt om du vill ha inverterade mönster (till exempel för att öka objekt med lägre pris mer än objekt med högre pris). Med ett prisintervall från 100 USD till 1 USD skulle du ställa in "boostRangeStart" på 100 och "boostRangeEnd" på 1 för att öka objekten med lägre pris. |
| "avstånd" | Ökar genom närhet eller geografisk plats. Den här funktionen kan bara användas med Edm.GeographyPoint-fält. |
| "tagg" | Ökar med taggar som är gemensamma för både sökdokument och frågesträngar. Taggar anges i en tagsParameter . Den här funktionen kan bara användas med fälten Edm.String och Collection(Edm.String). |
Regler för att använda funktioner
- Funktioner kan bara tillämpas på fält som tillskrivs som filtrerbara.
- Funktionstypen ("freshness", "magnitude", "distance", "tag") måste vara gemen.
- Funktioner får inte innehålla nullvärden eller tomma värden.
Mall
I det här avsnittet visas syntaxen och mallen för bedömningsprofiler. Se Egenskapsreferens i nästa avsnitt för beskrivningar av bedömningsprofilattributen.
"scoringProfiles": [
{
"name": "name of scoring profile",
"text": (optional, only applies to searchable fields) {
"weights": {
"searchable_field_name": relative_weight_value (positive #'s),
...
}
},
"functions": (optional) [
{
"type": "magnitude | freshness | distance | tag",
"boost": # (positive number used as multiplier for raw score != 1),
"fieldName": "(...)",
"interpolation": "constant | linear (default) | quadratic | logarithmic",
"magnitude": {
"boostingRangeStart": #,
"boostingRangeEnd": #,
"constantBoostBeyondRange": true | false (default)
}
// ( - or -)
"freshness": {
"boostingDuration": "..." (value representing timespan over which boosting occurs)
}
// ( - or -)
"distance": {
"referencePointParameter": "...", (parameter to be passed in queries to use as reference location)
"boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)
}
// ( - or -)
"tag": {
"tagsParameter": "..."(parameter to be passed in queries to specify a list of tags to compare against target field)
}
}
],
"functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"
}
],
"defaultScoringProfile": (optional) "...",
Egenskapsreferens
| Attribut | Beskrivning |
|---|---|
| name | Krävs. Det här är namnet på bedömningsprofilen. Den följer samma namngivningskonventioner för ett fält. Det måste börja med en bokstav, får inte innehålla punkter, kolon eller @-symboler och kan inte börja med frasen azureSearch (case-sensitive). |
| text | Innehåller egenskapen vikter. |
| weights | Valfritt. Namn/värde-par som anger ett sökbart fält och ett positivt heltal eller flyttalsnummer som ett fälts poäng ska ökas med. Det positiva heltal eller talet blir en multiplikator för den ursprungliga fältpoängen som genererats av rangordningsalgoritmen. Om en fältpoäng till exempel är 2 och viktvärdet är 3 blir fältets boostade poäng 6. Enskilda fältpoäng aggregeras sedan för att skapa en dokumentfältpoäng som sedan används för att rangordna dokumentet i resultatuppsättningen. |
| Funktioner | Valfritt. En bedömningsfunktion kan bara tillämpas på fält som är filtrerbara. |
| functions > type | Krävs för bedömningsfunktioner. Anger vilken typ av funktion som ska användas. Giltiga värden är storlek, freshness, distance och tag. Du kan inkludera fler än en funktion i varje bedömningsprofil. Funktionsnamnet måste vara gemener. |
| functions > boost | Krävs för bedömningsfunktioner. Ett positivt tal som används som multiplikator för rådatapoäng. Det får inte vara lika med 1. |
| functions > fieldname | Krävs för bedömningsfunktioner. En bedömningsfunktion kan bara tillämpas på fält som ingår i fältsamlingen för indexet och som är filtrerbara. Dessutom introducerar varje funktionstyp ytterligare begränsningar (freshness används med datetime-fält, storlek med heltal eller dubbla fält och avstånd med platsfält). Du kan bara ange ett fält per funktionsdefinition. Om du till exempel vill använda storlek två gånger i samma profil måste du inkludera två definitioners storlek, en för varje fält. |
| funktioner > interpolering | Krävs för bedömningsfunktioner. Definierar lutningen för vilken poängen som ökar ökar från början av intervallet till slutet av intervallet. Giltiga värden är Linjär (standard), Konstant, Kvadratisk och Logaritmisk. Mer information finns i Ange interpoleringar. |
| funktioner > storlek | Storleksbedömningsfunktionen används för att ändra rangordning baserat på intervallet med värden för ett numeriskt fält. Några av de vanligaste användningsexempel på detta är: "Stjärnklassificeringar:" Ändra bedömning baserat på värdet i fältet "Stjärnklassificering". När två objekt är relevanta visas objektet med det högre omdömet först. "Marginal:" När två dokument är relevanta kanske en återförsäljare vill öka dokument som har högre marginaler först. "Antal klick:" För program som spårar klickning genom åtgärder till produkter eller sidor kan du använda storlek för att öka antalet objekt som tenderar att få mest trafik. "Antal hämtningar:" För program som spårar nedladdningar kan du med funktionen magnitude öka antalet hämtningsbara objekt. |
| functions > magnitude > boostRangeStart | Anger startvärdet för intervallet som du poängsätter med storleken. Värdet måste vara ett heltal eller flyttalsnummer. För stjärnklassificeringar mellan 1 och 4 skulle detta vara 1. För marginaler över 50 % skulle detta vara 50. |
| functions > magnitude > boostRangeEnd | Anger slutvärdet för intervallet som du får poäng för. Värdet måste vara ett heltal eller flyttalsnummer. För stjärnklassificeringar mellan 1 och 4 skulle detta vara 4. |
| functions > magnitude > constantBoostBeyondRange | Giltiga värden är true eller false (standard). Om värdet är sant fortsätter den fullständiga höjning att gälla för dokument som har ett värde för målfältet som är högre än den övre änden av intervallet. Om värdet är falskt tillämpas inte höjning av den här funktionen på dokument som har ett värde för målfältet som ligger utanför intervallet. |
| functions > freshness | Funktionen för bedömning av färskhet används för att ändra rangordningspoäng för objekt baserat på värden i DateTimeOffset-fält. Ett objekt med ett senare datum kan till exempel rangordnas högre än äldre objekt. Det är också möjligt att rangordna objekt som kalenderhändelser med framtida datum så att objekt närmare nu kan rangordnas högre än objekt längre fram i framtiden. I den aktuella tjänstutgåren kommer ena änden av intervallet att korrigeras till den aktuella tiden. Den andra änden är en tid i det förflutna som baseras på boostDuration. Om du vill öka ett antal gånger i framtiden använder du en negativ boostDuration. Hastigheten för att öka ändringarna från ett högsta och lägsta intervall bestäms av interpoleringen som tillämpas på bedömningsprofilen (se bilden nedan). Om du vill återställa den ökningsfaktor som används väljer du en boost-faktor som är mindre än 1. |
| functions > freshness > boostDuration | Anger en förfalloperiod efter vilken en ökning stoppas för ett visst dokument. Syntax och exempel finns i Ange boostDuration i följande avsnitt. |
| funktioner > avstånd | Funktionen för avståndsbedömning används för att påverka poängen för dokument baserat på hur nära eller långt de är relativa till en geografisk referensplats. Referensplatsen anges som en del av frågan i en parameter (med frågeparametern scoringParameter) som ett lon-lat-argument. |
| functions > distance > referencePointParameter | En parameter som ska skickas i frågor som ska användas som referensplats (med hjälp av frågeparametern scoringParameter). Se Sök efter dokument (REST API) för beskrivningar av frågeparametrar. |
| functions > distance > boostDistance | Ett tal som anger avståndet i kilometer från referensplatsen där ökningsintervallet slutar. |
| functions > tagg | Funktionen för taggbedömning används för att påverka poängen för dokument baserat på taggar i dokument och sökfrågor. Dokument som har taggar som är gemensamma för sökfrågan kommer att ökas. Taggarna för sökfrågan anges som en bedömningsparameter i varje sökbegäran (med hjälp av frågeparametern scoringParameter). |
| functions > tag > tagsParameter | En parameter som ska skickas i frågor för att ange taggar för en viss begäran (med hjälp av frågeparametern scoringParameter). Se Sök efter dokument (REST API) för beskrivningar av frågeparametrar. |
| functions > functionAggregation | Valfritt. Gäller endast när funktioner anges. Giltiga värden är: summa (standard), medelvärde, minimum, maximum och firstMatching. En sökpoäng är ett enda värde som beräknas från flera variabler, inklusive flera funktioner. Det här attributet anger hur ökningarna av alla funktioner kombineras till en enda aggregering som sedan tillämpas på basdokumentpoängen. Baspoängen baseras på tf-idf-värdet som beräknas från dokumentet och sökfrågan. |
| defaultScoringProfile | Om ingen bedömningsprofil har angetts vid körning av en sökbegäran används standardbedömningen(endast tf-idf). Du kan åsidosätta det inbyggda standardvärdet och ersätta en anpassad profil som den som ska användas när ingen specifik profil anges i sökbegäran. |
Ange interpoleringar
Med interpoleringar kan du ange formen på lutningen som används för bedömning. Eftersom bedömning är högt till lågt minskar lutningen alltid, men interpoleringen avgör kurvan för den nedåtgående lutningen. Följande interpoleringar kan användas:
| Interpolation | Beskrivning |
|---|---|
linear |
För objekt som ligger inom max- och minimiintervallet utförs den ökning som tillämpas på objektet i en ständigt minskande mängd. Linjär är standardinterpolation för en bedömningsprofil. |
constant |
För objekt som ligger inom start- och slutintervallet tillämpas en konstant ökning på rangordningsresultatet. |
quadratic |
I jämförelse med en linjär interpolering som har en ständigt minskande ökning, minskar kvadratisk inledningsvis i mindre takt och när den sedan närmar sig slutintervallet minskar den med ett mycket högre intervall. Det här interpoleringsalternativet tillåts inte i taggbedömningsfunktioner. |
logarithmic |
I jämförelse med en linjär interpolering som har en ständigt minskande ökning, minskar Logaritmisk initialt i högre takt och när den närmar sig slutintervallet minskar den med ett mycket mindre intervall. Det här interpoleringsalternativet tillåts inte i taggbedömningsfunktioner. |

Ange boostDuration
boostingDuration är ett attribut för freshness funktionen . Du använder den för att ange en förfalloperiod efter vilken en ökning stoppas för ett visst dokument. Om du till exempel vill öka en produktlinje eller ett varumärke under en kampanjperiod på 10 dagar anger du 10-dagarsperioden som "P10D" för dessa dokument.
boostingDuration måste formateras som ett XSD"dayTimeDuration"-värde (en begränsad delmängd av ett ISO 8601-varaktighetsvärde). Mönstret för detta är: "P[nD][T[nH][nM][nS]]".
Följande tabell innehåller flera exempel.
| Varaktighet | boostDuration |
|---|---|
| 1 dag | "P1D" |
| 2 dagar och 12 timmar | "P2DT12H" |
| 15 minuter | "PT15M" |
| 30 dagar, 5 timmar, 10 minuter och 6,334 sekunder | "P30DT5H10M6.334S" |
Fler exempel finns i XML-schema: Datatyper (W3.org webbplats).