Scoreprofielen toevoegen aan een zoekindex
Voor zoekquery's in volledige tekst berekent de zoekmachine een zoekscore voor elk overeenkomend document, waardoor resultaten kunnen worden gerangschikt van hoog naar laag. Azure Cognitive Search maakt gebruik van een standaardscorealgoritme om een initiële score te berekenen, maar u kunt de berekening aanpassen via een scoreprofiel.
Scoreprofielen worden ingesloten in indexdefinities en bevatten eigenschappen voor het verhogen van de score van overeenkomsten, waarbij aanvullende criteria in het profiel de boostlogica bieden. U kunt bijvoorbeeld overeenkomsten verbeteren op basis van hun omzetmogelijkheden, nieuwere items promoveren of items die te lang in de voorraad staan, verbeteren.
Bent u niet bekend met relevantieconcepten? In het volgende videosegment wordt snel doorgestuurd naar de manier waarop scoreprofielen werken in Azure Cognitive Search, maar de video bevat ook basisconcepten. Mogelijk wilt u ook de rangschikking van overeenkomsten en scoren bekijken voor meer achtergrondinformatie.
Wat is een scoreprofiel?
Een scoreprofiel maakt deel uit van de indexdefinitie en bestaat uit gewogen velden, functies en parameters. Het doel van een scoreprofiel is het verbeteren of versterken van overeenkomende documenten op basis van criteria die u op geeft.
In de volgende definitie ziet u een eenvoudig profiel met de naam 'geo'. Dit is een boost voor de resultaten met de zoekterm in het veld hotelName. Ook wordt de functie gebruikt om de voorkeur te geven aan resultaten die distance zich binnen tien kilometer van de huidige locatie bevinden. Als iemand zoekt op de term 'inn' en 'inn' deel uitmaakt van de hotelnaam, worden documenten met hotels met 'inn' binnen een straal van 10 KM van de huidige locatie hoger weergegeven in de zoekresultaten.
"scoringProfiles": [
{
"name":"geo",
"text": {
"weights": {
"hotelName": 5
}
},
"functions": [
{
"type": "distance",
"boost": 5,
"fieldName": "location",
"interpolation": "logarithmic",
"distance": {
"referencePointParameter": "currentLocation",
"boostingDistance": 10
}
}
]
}
]
Als u dit scoreprofiel wilt gebruiken, wordt uw query geformuleerd om de parameter scoringProfile in de aanvraag op te geven.
POST /indexes/hotels/docs&api-version=2020-06-30
{
"search": "inn",
"scoringProfile": "geo",
"scoringParameter": currentLocation--122.123,44.77233
}
Deze query zoekt naar de term 'inn' en geeft de huidige locatie door. U ziet dat deze query andere parameters bevat, zoals scoringParameter. Queryparameters worden beschreven in Documenten zoeken (REST API).
Zie het uitgebreide voorbeeld om een gedetailleerder voorbeeld van een scoreprofiel te bekijken.
Hoe scores worden berekend
Scores worden berekend voor zoekopdrachten in volledige tekst om de meest relevante overeenkomsten te rangschikken en deze bovenaan het antwoord te retourneren. De algehele score voor elk document is een aggregatie van de afzonderlijke scores voor elk veld, waarbij de afzonderlijke score van elk veld wordt berekend op basis van de term frequentie en documentfrequentie van de gezochte termen in dat veld (ook wel TF-IDF of term frequency-inverse documentfrequentie genoemd).
Tip
U kunt de parameter featuresMode gebruiken om aanvullende scoredetails op te vragen bij de zoekresultaten (inclusief de scores op veldniveau).
Wanneer moet ik scoring-logica toevoegen?
U moet een of meer scoreprofielen maken wanneer het standaardrangschikkingsgedrag niet ver genoeg gaat om te voldoen aan uw bedrijfsdoelstellingen. U kunt bijvoorbeeld besluiten dat de zoekrelevantie de voorkeur moet geven aan nieuw toegevoegde items. Op dezelfde manier hebt u mogelijk een veld met winstmarge of een ander veld dat de omzetmogelijkheden aangeeft. Het stimuleren van resultaten die zinvoller zijn voor uw gebruikers of het bedrijf, is vaak de belangrijkste factor bij de acceptatie van scoreprofielen.
Volgorde op basis van relevantie op een zoekpagina wordt ook geïmplementeerd via scoreprofielen. Denk aan pagina's met zoekresultaten die u in het verleden hebt gebruikt, waarmee u kunt sorteren op prijs, datum, classificatie of relevantie. In Azure Cognitive Search kunnen scoreprofielen worden gebruikt om de optie 'relevantie' te bepalen. De definitie van relevantie wordt bepaald door u, gebaseerd op bedrijfsdoelstellingen en het type zoekervaring dat u wilt leveren.
Uitgebreid voorbeeld
In het volgende voorbeeld ziet u het schema van een index met twee scoreprofielen ( boostGenre , newAndHighlyRated ). Elke query op deze index die een profiel als een queryparameter bevat, gebruikt het profiel om de resultatenset te scoren.
Het profiel maakt gebruik van gewogen tekstvelden, boosting matches die te vinden zijn in de velden boostGenre profilerenTitle, genre en artistName. De velden worden respectievelijk 1,5, 5 en 2 boosted. Waarom is het genre zo veel hoger dan de andere? Als er wordt gezocht op gegevens die enigszins homogen zijn (zoals het geval is bij 'genre' in de musicstoreindex), hebt u mogelijk een grotere afwijking in de relatieve gewichten nodig. In de musicstoreindex wordt 'rock' bijvoorbeeld weergegeven als zowel een genre als in identieke genrebeschrijvingen. Als u wilt dat genre opweegt tegen de genrebeschrijving, heeft het genreveld een veel hoger relatief gewicht nodig.
{
"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" ]
}
]
}
Stappen voor het toevoegen van een scoreprofiel
Als u aangepast scoregedrag wilt implementeren, voegt u een scoreprofiel toe aan het schema dat de index definieert. U kunt maximaal 100 scoreprofielen binnen een index hebben (zie Servicelimieten), maar u kunt slechts één profiel tegelijk opgeven in een bepaalde query.
Begin met een indexdefinitie. U kunt scoreprofielen aan een bestaande index toevoegen en bijwerken zonder dat u deze opnieuw moet bouwen. Gebruik een update-indexaanvraag om uw revisie te posten.
Plak de sjabloon in dit onderwerp.
Geef een naam op. Scoreprofielen zijn optioneel, maar als u er een toevoegt, is de naam vereist. Zorg ervoor dat u Cognitive Search voor velden volgt (begint met een letter, vermijdt speciale tekens en gereserveerde woorden).
Geef boostingcriteria op. Eén profiel kan gewogen velden, functiesof beide bevatten.
U moet iteratief werken met behulp van een gegevensset die u helpt om de slechtheid van een bepaald profiel te bewijzen of weer te geven.
Scoreprofielen kunnen worden gedefinieerd in Azure Portal zoals wordt weergegeven in de volgende schermopname, of programmatisch via REST API's of in Azure SDK's, zoals de klasse ScoringProfile in de Azure SDK voor .NET.
Gewogen velden gebruiken
Gebruik gewogen velden wanneer veldcontext belangrijk is en query's zoeken in volledige tekst (ook wel vrije tekst zoeken genoemd). Als een query bijvoorbeeld de term 'luchthaven' bevat, wilt u mogelijk dat 'luchthaven' in het veld Beschrijving meer gewicht heeft dan in hotelnaam.
Gewogen velden bestaan uit een doorzoekbaar veld en een positief getal dat wordt gebruikt als vermenigvuldiger. Als de oorspronkelijke veldscore van HotelName 3 is, wordt de boosted score voor dat veld 6, wat bijdraagt aan een hogere algemene score voor het bovenliggende document zelf.
"scoringProfiles": [
{
"name": "boostKeywords",
"text": {
"weights": {
"HotelName": 2,
"Description": 5
}
}
}
Functies gebruiken
Gebruik functies wanneer eenvoudige relatieve gewichten onvoldoende zijn of niet van toepassing zijn, zoals bij afstand en nieuwheid. Dit zijn berekeningen van numerieke gegevens. U kunt meerdere functies per scoreprofiel opgeven.
| Functie | Beschrijving |
|---|---|
| 'nieuwheid' | Verhoogt de waarden in een datum/tijd-veld (Edm.DateTimeOffset). Deze functie heeft een kenmerk, zodat u een waarde kunt opgeven die een periode vertegenwoordigt boostingDuration waarover boosting plaatsvindt. |
| "magnitude" | Verhoogt op basis van hoe hoog of laag een numerieke waarde is. Scenario's waarin deze functie wordt aanroepen, zijn onder andere het verhogen van de winstmarge, de hoogste prijs, de laagste prijs of het aantal downloads. Deze functie kan alleen worden gebruikt met Edm.Double en Edm.Int velden. Voor de magnitude-functie kunt u het bereik omkeren, van hoog naar laag, als u het inverse patroon wilt (bijvoorbeeld om goedkopere items duurder te maken dan artikelen met een hogere prijs). Bij een prijsbereik van $ 100 tot $ 1 stelt u 'boostingRangeStart' in op 100 en 'boostingRangeEnd' op 1 om de goedkopere items te verbeteren. |
| 'afstand' | Verhoogt de nabijheid of geografische locatie. Deze functie kan alleen worden gebruikt met velden van Edm.GeographyPoint. |
| 'tag' | Wordt versterkt door tags die gemeenschappelijk zijn voor zowel zoekdocumenten als queryreeksen. Tags worden opgegeven in een tagsParameter . Deze functie kan alleen worden gebruikt met de velden Edm.String en Collection(Edm.String). |
Regels voor het gebruik van functies
- Functies kunnen alleen worden toegepast op velden die zijn toegewezen als filterbaar.
- Functietype ('nieuwheid', 'magnitude', 'afstand', 'tag') moet in kleine gevallen zijn.
- Functies kunnen geen null- of lege waarden bevatten.
Sjabloon
In deze sectie ziet u de syntaxis en sjabloon voor scoreprofielen. Raadpleeg Naslaginformatie over eigenschappen in de volgende sectie voor beschrijvingen van de kenmerken van het scoreprofiel.
"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) "...",
Verwijzing naar eigenschappen
| Kenmerk | Beschrijving |
|---|---|
| naam | Vereist. Dit is de naam van het scoreprofiel. Deze volgt dezelfde naamconventen van een veld. Het moet beginnen met een letter, mag geen punten, dubbele punten of @-symbolen bevatten en mag niet beginnen met de zin azureSearch (case-sensitive). |
| tekst | Bevat de eigenschap gewichten. |
| weights | Optioneel. Naam-waardeparen die een doorzoekbaar veld en een positief geheel getal of drijvende-puntnummer opgeven waarmee de score van een veld wordt versterkt. Het positieve gehele getal of getal wordt een vermenigvuldigingsscore voor de oorspronkelijke veldscore die wordt gegenereerd door het classificatiealgoritme. Als een veldscore bijvoorbeeld 2 is en de gewichtswaarde 3 is, wordt de boosted score voor het veld 6. Afzonderlijke veldscores worden vervolgens geaggregeerd om een documentveldscore te maken, die vervolgens wordt gebruikt om het document in de resultatenset te rangschikken. |
| Functies | Optioneel. Een scorefunctie kan alleen worden toegepast op velden die kunnen worden gefilterd. |
| functies > type | Vereist voor scoring-functies. Geeft het type functie aan dat moet worden gebruikt. Geldige waarden zijn magnitude, nieuwheid, afstand en tag. U kunt meer dan één functie opnemen in elk scoreprofiel. De naam van de functie moet kleine kleine namen zijn. |
| functies > boost | Vereist voor scoring-functies. Een positief getal dat wordt gebruikt als vermenigvuldiger voor de onbewerkte score. Deze mag niet gelijk zijn aan 1. |
| functies > veldnaam | Vereist voor scoring-functies. Een scorefunctie kan alleen worden toegepast op velden die deel uitmaken van de veldverzameling van de index en die kunnen worden gefilterd. Daarnaast introduceert elk functietype extra beperkingen (nieuwheid wordt gebruikt met datum/tijd-velden, magnitude met gehele of dubbele velden en afstand met locatievelden). U kunt slechts één veld per functiedefinitie opgeven. Als u bijvoorbeeld magnitude twee keer in hetzelfde profiel wilt gebruiken, moet u twee definities magnitude opnemen, één voor elk veld. |
| functies > interpolatie | Vereist voor scoring-functies. Definieert de helling waarvoor de scoreverhoging toeneemt van het begin van het bereik tot het einde van het bereik. Geldige waarden zijn onder andere Linear (default), Constant, Quadratic en Logarithmic. Zie Interpolaties instellen voor meer informatie. |
| functies > magnitude | De scorefunctie magnitude wordt gebruikt om classificaties te wijzigen op basis van het bereik van waarden voor een numeriek veld. Enkele van de meest voorkomende gebruiksvoorbeelden hiervan zijn: 'Sterbeoordelingen:' Wijzig de score op basis van de waarde in het veld Sterbeoordeling. Wanneer twee items relevant zijn, wordt het item met de hogere classificatie eerst weergegeven. Marge: wanneer twee documenten relevant zijn, wil een detailhandelaar mogelijk eerst documenten met hogere marges verbeteren. 'Aantal klikken:' Voor toepassingen die klikacties naar producten of pagina's bijhouden, kunt u magnitude gebruiken om items te verbeteren die de meeste verkeer krijgen. 'Download counts:' Voor toepassingen die downloads bijhouden, kunt u met de functie magnitude items met de meeste downloads verbeteren. |
| functies > magnitude > boostingRangeStart | Hiermee stelt u de beginwaarde van het bereik waarover magnitude wordt scored. De waarde moet een geheel getal of een drijvende-puntnummer zijn. Voor sterwaarderingen van 1 tot en met 4 is dit 1. Voor marges van meer dan 50% is dit 50. |
| functies > magnitude > boostingRangeEnd | Hiermee stelt u de eindwaarde van het bereik waarover magnitude wordt scored. De waarde moet een geheel getal of een drijvende-puntnummer zijn. Voor sterwaarderingen van 1 tot en met 4 is dit 4. |
| functies > magnitude > constantBoostBeyondRange | Geldige waarden zijn waar of onwaar (standaard). Als deze waarde is ingesteld op true, blijft de volledige boost van toepassing op documenten die een waarde hebben voor het doelveld dat hoger is dan de bovengrens van het bereik. Indien onwaar, wordt de boost van deze functie niet toegepast op documenten met een waarde voor het doelveld dat buiten het bereik valt. |
| functies > nieuwheid | De functie voor het scoren van nieuwheid wordt gebruikt om classificatiescores voor items te wijzigen op basis van waarden in DateTimeOffset-velden. Een item met een recentere datum kan bijvoorbeeld hoger worden geclassificeerd dan oudere items. Het is ook mogelijk om items zoals kalendergebeurtenissen te rangschikken met toekomstige datums, zodat items dichter bij het heden in de toekomst hoger kunnen worden geclassificeerd dan items. In de huidige service-release wordt één eind van het bereik vastgezet op de huidige tijd. Het andere uiteinde is een tijd in het verleden op basis van boostingDuration. Gebruik een negatieve boostingDuration om een reeks keren in de toekomst te verbeteren. De snelheid waarmee de boost van een maximum- en minimumbereik verandert, wordt bepaald door de Interpolatie die wordt toegepast op het scoreprofiel (zie de onderstaande afbeelding). Als u de toegepaste boostfactor wilt omkeren, kiest u een boostfactor van minder dan 1. |
| functies > nieuwheid > boostingDuration | Hiermee stelt u een vervalperiode in waarna het boosten stopt voor een bepaald document. Zie Set boostingDuration in de volgende sectie voor syntaxis en voorbeelden. |
| functies > afstand | De functie voor het scoren van afstand wordt gebruikt om de score van documenten te beïnvloeden op basis van hoe dicht of ver ze zich ten opzichte van een geografische referentielocatie bevinden. De referentielocatie wordt opgegeven als onderdeel van de query in een parameter (met behulp van de queryparameterparameter scoringParameter) als een lon,lat argument. |
| functies > afstand > ReferencePointParameter | Een parameter die moet worden doorgegeven in query's om te gebruiken als referentielocatie (met behulp van de queryparameterparameter scoringParameter). Zie Documenten zoeken (REST API) voor beschrijvingen van queryparameters. |
| functies > afstand > boostingDistance | Een getal dat de afstand in kilometer aangeeft van de referentielocatie waar het boosting-bereik eindigt. |
| functie > tag | De tagscorefunctie wordt gebruikt om de score van documenten te beïnvloeden op basis van tags in documenten en zoekquery's. Documenten met tags die gemeenschappelijk zijn voor de zoekquery, worden versterkt. De tags voor de zoekquery worden opgegeven als een scoring-parameter in elke zoekaanvraag (met behulp van de queryparameterparameter scoringParameter). |
| functies > tag > tagsParameter | Een parameter die moet worden doorgegeven in query's om tags voor een bepaalde aanvraag op te geven (met behulp van de queryparameterparameter scoringParameter). Zie Documenten zoeken (REST API) voor beschrijvingen van queryparameters. |
| functions > functionAggregation | Optioneel. Is alleen van toepassing wanneer functies zijn opgegeven. Geldige waarden zijn: som (standaard), gemiddelde, minimum, maximum en firstMatching. Een zoekscore is één waarde die wordt berekend vanuit meerdere variabelen, waaronder meerdere functies. Dit kenmerk geeft aan hoe de boosts van alle functies worden gecombineerd tot één statistische boost die vervolgens wordt toegepast op de basisdocumentscore. De basisscore is gebaseerd op de tf-idf-waarde die is berekend op basis van het document en de zoekquery. |
| defaultScoringProfile | Als er bij het uitvoeren van een zoekaanvraag geen scoreprofiel is opgegeven, wordt standaardscore gebruikt (alleen tf-idf). U kunt de ingebouwde standaardwaarde overschrijven, door een aangepast profiel te vervangen door het profiel dat moet worden gebruikt wanneer er geen specifiek profiel is opgegeven in de zoekaanvraag. |
Interpolaties instellen
Met interpolaties kunt u de vorm instellen van de helling die wordt gebruikt voor scoren. Omdat scoren van hoog naar laag is, neemt de helling altijd af, maar de interpolatie bepaalt de curve van de omlaage helling. De volgende interpolaties kunnen worden gebruikt:
| Interpolatie | Description |
|---|---|
linear |
Voor items die binnen het maximum- en minimumbereik liggen, wordt de op het item toegepaste boost uitgevoerd in een voortdurend afnemende hoeveelheid. Lineair is de standaardinterpolatie voor een scoreprofiel. |
constant |
Voor items binnen het begin- en eindbereik wordt een constante boost toegepast op de rangschikkingsresultaten. |
quadratic |
In vergelijking met een lineaire interpolatie die een voortdurend afnemende boost heeft, neemt Kwadratische interpolatie in eerste instantie in een kleiner tempo af en wanneer het eindbereik nadert, neemt deze af met een veel hoger interval. Deze interpolatieoptie is niet toegestaan in tagscorefuncties. |
logarithmic |
In vergelijking met een lineaire interpolatie die een voortdurend afnemende boost heeft, neemt Logarithmic in eerste instantie in een hoger tempo af en wanneer het eindbereik nadert, neemt deze af met een veel kleiner interval. Deze interpolatieoptie is niet toegestaan in tagscorefuncties. |

BoostingDuration instellen
boostingDuration is een kenmerk van de freshness functie . U gebruikt dit om een verloopperiode in te stellen waarna het boosten voor een bepaald document stopt. Als u bijvoorbeeld een productlijn of merk wilt boosten voor een actieperiode van 10 dagen, geeft u de periode van 10 dagen op als 'P10D' voor deze documenten.
boostingDuration moet worden opgemaakt als een XSD-waarde 'dayTimeDuration' (een beperkte subset van een ISO 8601-duurwaarde). Het patroon hiervoor is: "P[nD][T[nH][nM][nS]]".
De volgende tabel bevat verschillende voorbeelden.
| Duur | boostingDuration |
|---|---|
| 1 dag | "P1D" |
| 2 dagen en 12 uur | "P2DT12H" |
| 15 minuten | PT15M |
| 30 dagen, 5 uur, 10 minuten en 6,334 seconden | "P30DT5H10M6.334S" |
Zie XML Schema: Datatypes (W3.org website) voor meer voorbeelden.