Lägga till bedömningsprofiler för att öka sökpoängen

I den här artikeln får du lära dig hur du definierar en bedömningsprofil för att öka sökpoängen baserat på kriterier.

Kriterier kan vara ett viktat fält, till exempel när en matchning som finns i ett "taggar"-fält är mer relevant än en matchning som finns i "beskrivningar". Villkor kan också vara en funktion, till exempel den distance funktion som gynnar resultat som ligger inom ett angivet avstånd från den aktuella platsen.

Bedömningsprofiler definieras i ett sökindex och anropas på frågebegäranden. Du kan skapa flera profiler och sedan ändra frågelogik för att välja vilken som ska användas.

Anteckning

Känner du inte till relevansbegrepp? Följande videosegment snabbsnabbar fram till hur bedömningsprofiler fungerar i Azure Cognitive Search. Du kan också gå till Relevans och bedömning i Azure Cognitive Search för mer bakgrund.

Bedömningsprofildefinition

En bedömningsprofil är en del av indexdefinitionen och består av viktade fält, funktioner och parametrar.

Följande definition visar en enkel profil med namnet "geo". Det här exemplet ökar resultaten som har söktermen i fältet hotelName. Den använder distance också funktionen för att gynna resultat som ligger inom 10 kilometer från den aktuella platsen. Om någon söker på termen "inn" och "inn" råkar vara en del av hotellets namn visas dokument som innehåller hotell med "inn" inom en radie på 10 KM från den aktuella platsen högre 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. Om du använder REST-API:et anges frågor via GET- och POST-begäranden.

GET /indexes/hotels/docs?search+inn&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&api-version=2020-06-30

Observera syntaxskillnaderna när du använder POST. I POST är "scoringParameters" plural och det är en matris.

POST /indexes/hotels/docs&api-version=2020-06-30
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameters": [currentLocation--122.123,44.77233]
}

Den här frågan söker efter termen "inn" och skickar den aktuella platsen. Observera att den här frågan innehåller andra parametrar, till exempel scoringParameter. Frågeparametrar, inklusive "scoringParameter", beskrivs i REST API (Search Documents).

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 för rangordning av de mest relevanta matchningarna och returnerar dem överst i svaret. Den övergripande poängen för varje dokument är en sammansättning av de enskilda poängen för varje fält, där den enskilda poängen för varje fält beräknas baserat på termfrekvensen och dokumentfrekvensen för de sökte termerna inom det fältet (kallas TF-IDF eller termfrekvensinverterad dokumentfrekvens).

Du kan använda parametern featuresMode (förhandsversion) för att begära extra 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 standardrankningsbeteendet inte går tillräckligt långt för att uppfylla dina affärsmål. Du kan till exempel välja att sökrelevansen ska gynna 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 öka resultaten som är mer meningsfulla för dina användare eller företaget är ofta den avgörande faktorn för att införa bedömningsprofiler.

Relevansbaserad ordning på en söksida implementeras också via bedömningsprofiler. Överväg sökresultatsidor som du har använt tidigare som låter dig sortera efter pris, datum, omdöme eller relevans. I Azure Cognitive Search kan bedömningsprofiler användas för att driva alternativet "relevans". Definitionen av relevans är användardefinierad, bygger på affärsmål och vilken typ av sökupplevelse du vill leverera.

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 i ett index (se Tjänstgränser), men du kan bara ange en profil i taget i en viss fråga.

  1. Börja med en indexdefinition. Du kan lägga till och uppdatera bedömningsprofiler för ett befintligt index utan att behöva återskapa det. Använd en begäran om uppdateringsindex för att publicera revisionen.

  2. Klistra in mallen i den här artikeln.

  3. Ange ett namn. Bedömningsprofiler är valfria, men om du lägger till en, krävs namnet. Se till att följa namngivningskonventionerna för Cognitive Search för fält (börjar med en bokstav, undviker specialtecken och reserverade ord).

  4. Ange kriterier för att öka. En enskild profil kan innehålla viktade fält, funktioner eller båda.

Du bör arbeta iterativt med hjälp av en datauppsättning som hjälper dig att bevisa eller motbevisa effekten av en viss profil.

Bedömningsprofiler kan definieras i Azure Portal enligt följande skärmbild eller programmatiskt via REST-API:er eller i Azure SDK:er, till exempel klassen ScoringProfile i Azure SDK för .NET.

Sidan Lägg till bedömningsprofiler

Använda viktade fält

Använd viktade fält när fältkontext är viktigt och frågor är fulltextsökning. Om en fråga till exempel innehåller termen "flygplats" kanske du vill att "flygplats" i fältet Beskrivning ska ha större 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 värdet för det fältet 6, vilket bidrar till en högre totalpoä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 är otillräckliga eller inte gäller, vilket är fallet med avstånd och färskhet, som är beräkningar över numeriska data. Du kan ange flera funktioner per bedömningsprofil.

Funktion Beskrivning
"friskhet" Ökar efter värden i ett datetime-fält (Edm.DateTimeOffset). Den här funktionen har attributet "boostDuration" så att du kan ange ett värde som representerar ett tidsintervall som ökar.
"storlek" Ökar baserat på hur högt eller lågt ett numeriskt värde är. Scenarier som anropar för 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 fält och Edm.Int . För funktionen magnitude kan du vända intervallet, högt till lågt, om du vill ha det omvända mönstret (till exempel för att öka billigare objekt mer än dyrare objekt). Med tanke på ett prisintervall från $ 100 till $ 1, skulle du ange "boostRangeStart" på 100 och "ökaRangeEnd" till 1 för att öka de billigare objekten.
"avstånd" Ökar med närhet eller geografisk plats. Den här funktionen kan bara användas med Edm.GeographyPoint fält.
"tag" Ökar med taggar som är gemensamma för både sökdokument och frågesträngar. Taggar tillhandahålls i en "tagsParameter". Den här funktionen kan endast användas med sökfält av typen Edm.String och Collection(Edm.String).

Regler för att använda funktioner

  • Funktioner kan endast tillämpas på fält som tillskrivs som filterbara.
  • Funktionstypen ("freshness", "magnitude", "distance", "tag") måste vara gemen.
  • Funktioner kan inte innehålla null- eller tomma värden.

Mall

Det här avsnittet visar syntaxen och mallen för bedömning av profiler. Se Egenskapsreferens i nästa avsnitt för beskrivningar av attributen för bedömningsprofilen.

"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. Den måste börja med en bokstav, får inte innehålla punkter, kolon eller @-symboler och kan inte börja med frasen azureSearch (skiftlägeskänslig).
text Innehåller egenskapen weights.
weights Valfritt. Namn/värde-par som anger ett sökbart fält och ett positivt heltal eller flyttalsnummer för att öka ett fälts poäng. Det positiva heltalet eller talet blir en multiplikator för den ursprungliga fältpoängen som genereras av rangordningsalgoritmen. Om ett fältresultat till exempel är 2 och viktvärdet är 3, blir den ökade poängen för fältet 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 kan filtreras.
funktionstyp > Krävs för bedömningsfunktioner. Anger vilken typ av funktion som ska användas. Giltiga värden är storlek, färskhet, avstånd och tagg. Du kan inkludera fler än en funktion i varje bedömningsprofil. Funktionsnamnet måste vara gemener.
funktioner > ökar Krävs för bedömningsfunktioner. Ett positivt tal som används som multiplikator för råpoäng. Det kan inte vara lika med 1.
functions > fieldname Krävs för bedömningsfunktioner. En bedömningsfunktion kan endast tillämpas på fält som ingår i indexets fältsamling och som kan filtreras. Dessutom introducerar varje funktionstyp ytterligare begränsningar (färskhet används med datetime-fält, storlek med heltal eller dubbla fält och avstånd med platsfält). Du kan bara ange ett enda fält per funktionsdefinition. Om du till exempel vill använda magnitud två gånger i samma profil måste du inkludera två definitionsstorlekar, en för varje fält.
funktionsinterpolation > Krävs för bedömningsfunktioner. Definierar lutningen för vilken poängökningen ökar från början av intervallet till slutet av intervallet. Giltiga värden är linjära (standard), konstanter, kvadratiska och logaritmiska. Mer information finns i Ange interpoleringar .
funktionsstorlek > Funktionen för storleksbedömning används för att ändra rangordningen baserat på intervallet med värden för ett numeriskt fält. Några av de vanligaste användningsexemplen för detta är:

"Star ratings:" Alter the scoring based on the value within the "Star Rating" (Stjärnklassificering). När två objekt är relevanta visas objektet med högre klassificering först.
"Margin:" När två dokument är relevanta kan en återförsäljare vilja öka dokument som har högre marginaler först.
"Antal klick:" För program som spårar klick genom åtgärder för produkter eller sidor kan du använda storlek för att öka objekt som tenderar att få ut mest trafik.
"Antal nedladdningar:" För program som spårar nedladdningar kan du med funktionen magnitude öka objekt som har flest nedladdningar.
functions > magnitude > boostingRangeStart Anger startvärdet för det intervall som storleken poängsätts för. Värdet måste vara ett heltal eller flyttalsnummer. För stjärnbetyg på 1 till 4 skulle detta vara 1. För marginaler över 50 % skulle detta vara 50.
functions > magnitude > boostingRangeEnd Anger slutvärdet för intervallet över vilket magnitud poängsätts. Värdet måste vara ett heltal eller flyttalsnummer. För stjärnbetyg på 1 till 4 skulle detta vara 4.
functions > magnitude > constantBoostBeyondRange Giltiga värden är true eller false (standard). När värdet är true fortsätter den fullständiga boosten 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 det är falskt tillämpas inte boosten för den här funktionen på dokument som har ett värde för målfältet som ligger utanför intervallet.
funktioner > färskhet Funktionen för färskhetsbedömning används för att ändra rangordningspoäng för objekt baserat på värden i fälten DateTimeOffset. Ett objekt med ett senare datum kan till exempel rangordnas högre än äldre objekt.

Det går också att rangordna objekt som kalenderhändelser med framtida datum så att objekt närmare nutiden kan rangordnas högre än objekt längre fram i framtiden.

I den aktuella tjänstversionen korrigeras ena änden av intervallet till den aktuella tiden. Den andra änden är en tid i det förflutna baserat på boostDuration. För att öka ett antal gånger i framtiden använder du en negativ boostDuration.

Den hastighet med vilken ökningstakten ändras från ett högsta och minsta intervall bestäms av interpolationen som tillämpas på bedömningsprofilen (se bilden nedan). Om du vill vända den ökningsfaktor som tillämpas väljer du en boostfaktor på mindre än 1.
funktioner > färskhet > ökaDuration Anger en förfalloperiod varefter en ökning stoppas för ett visst dokument. Se Ange boostDuration i följande avsnitt för syntax och exempel.
funktionsavstå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 i förhållande till en geografisk referensplats. Referensplatsen anges som en del av frågan i en parameter (med frågeparametern scoringParameter) som argument lon,lat .
functions > distance > referencePointParameter En parameter som ska skickas i frågor som ska användas som referensplats (med frågeparametern scoringParameter).
funktioner > avstånd > ökaDistance Ett tal som anger avståndet i kilometer från referensplatsen där ökningsintervallet slutar.
funktionstagg > Taggbedömningsfunktionen 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 med sökfrågan kommer att ökas. Taggarna för sökfrågan anges som en bedömningsparameter i varje sökbegäran (med 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 frågeparametern scoringParameter). Parametern består av en kommaavgränsad lista över hela termer. Om en viss tagg i listan i sig är en kommaavgränsad lista kan du använda en textnormaliserare i fältet för att ta bort kommatecken vid frågetillfället (mappa kommatecknet till ett blanksteg). Den här metoden "platta ut" listan så att alla termer är en enda lång sträng med kommaavgränsade termer.
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 enskilt 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 aggregeringsökning 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 När du kör en sökbegäran, om ingen bedömningsprofil har angetts, används standardpoäng (endast tf-idf ).

Du kan åsidosätta den inbyggda standardinställningen 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 poängsättningen är hög till låg minskar lutningen alltid, men interpolationen 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 minintervallet görs den boost som tillämpas på objektet i en ständigt minskande mängd. Linjär är standardinterpolationen för en bedömningsprofil.
constant För objekt som ligger inom start- och slutintervallet tillämpas en konstant boost på rankningsresultatet.
quadratic I jämförelse med en linjär interpolation som har en ständigt minskande ökning minskar quadratic till en början i mindre takt och när den 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 interpolation 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.

Konstanta, linjära, kvadratiska, log10-linjer i graf

Ange boostDuration

boostingDuration är ett attribut för freshness funktionen. Du använder den för att ange en förfalloperiod varefter en ökning stoppas för ett visst dokument. Om du till exempel vill öka en produktlinje eller ett varumärke för en kampanjperiod på 10 dagar anger du 10-dagarsperioden som "P10D" för dessa dokument.

boostingDuration måste formateras som ett XSD-värde för "dayTimeDuration" (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).

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ängsätta resultatuppsättningen.

Profilen boostGenre använder viktade textfält, vilket ökar matchningar som finns i fälten albumTitle, genre och artistName. Fälten höjs med 1,5, 5 respektive 2. Varför ökas genren så mycket högre än de andra? Om sökningen utförs över data som är något homogena (vilket är fallet med "genre" i musicstoreindex) kan du behöva en större varians i de relativa vikterna. I till exempel musicstoreindex visas "rock" som både 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" ]  
    }  
  ]   
}  

Se även