Aggiungere profili di assegnazione dei punteggi per aumentare i punteggi di ricerca

In questo articolo si apprenderà come definire un profilo di assegnazione dei punteggi per aumentare i punteggi di ricerca in base ai criteri.

I criteri possono essere un campo ponderato, ad esempio quando una corrispondenza trovata in un campo "tag" è più rilevante di una corrispondenza trovata in "descrizioni". I criteri possono anche essere una funzione, ad esempio la distance funzione che privilegia i risultati all'interno di una distanza specificata della posizione corrente.

I profili di assegnazione dei punteggi sono definiti in un indice di ricerca e richiamati nelle richieste di query. È possibile creare più profili e quindi modificare la logica di query per scegliere quale viene usata.

Nota

Non si ha familiarità con i concetti di pertinenza? Il segmento video seguente inoltra rapidamente il funzionamento dei profili di assegnazione dei punteggi in Ricerca cognitiva di Azure. È anche possibile visitare pertinenza e assegnazione di punteggi in Ricerca cognitiva di Azure per un maggiore background.

Definizione del profilo di assegnazione dei punteggi

Un profilo di assegnazione dei punteggi fa parte della definizione dell'indice ed è costituito da campi ponderati, funzioni e parametri.

La definizione seguente mostra un semplice profilo denominato 'geo'. In questo esempio vengono incrementati i risultati con il termine di ricerca nel campo hotelName. Usa anche la distance funzione per favorire i risultati entro 10 chilometri dalla posizione corrente. Se si cerca il termine "inn" e "inn" fa parte del nome di un hotel, i documenti che includono gli hotel con "inn" in un raggio di 10 km dalla posizione corrente verranno visualizzati più in alto nei risultati della ricerca.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Per usare questo profilo di assegnazione dei punteggi, la query viene formulata per specificare il parametro scoringProfile nella richiesta. Se si usa l'API REST, le query vengono specificate tramite richieste GET e POST.

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

Si notino le differenze di sintassi quando si usa POST. In POST "scoringParameters" è plurale ed è una matrice.

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

Questa query cerca il termine "inn" e passa nella posizione corrente. Si noti che questa query include altri parametri, ad esempio punteggioParameter. I parametri di query, inclusi "scoringParameter", sono descritti in Documenti di ricerca (API REST).

Vedere l'esempio esteso per esaminare un esempio più dettagliato di un profilo di assegnazione dei punteggi.

Modalità di calcolo dei punteggi

I punteggi vengono calcolati per le query di ricerca full-text per classificare le corrispondenze più rilevanti e restituirle nella parte superiore della risposta. Il punteggio complessivo per ogni documento è un'aggregazione dei singoli punteggi per ogni campo, in cui il punteggio individuale di ogni campo viene calcolato in base alla frequenza del termine e alla frequenza del documento dei termini ricercati all'interno di tale campo (noto come frequenza del documento tf-IDF o frequenza del termine inversa).

È possibile usare il parametro featuresMode (anteprima) per richiedere dettagli di punteggio aggiuntivi con i risultati della ricerca (inclusi i punteggi a livello di campo).

Quando aggiungere la logica di assegnazione dei punteggi

È consigliabile creare uno o più profili di punteggio quando il comportamento di classificazione predefinito non permette di raggiungere gli obiettivi aziendali stabiliti. È ad esempio possibile che si voglia assegnare una rilevanza di ricerca maggiore agli elementi aggiunti di recente. Analogamente, è possibile che sia presente un campo che include i margini di profitto o un altro campo che indica il potenziale di ricavi. L'aumento dei risultati più significativi per gli utenti o l'azienda è spesso il fattore di scelta nell'adozione dei profili di assegnazione dei punteggi.

L'ordinamento basato sulla rivalutazione in una pagina di ricerca viene implementato anche tramite i profili di assegnazione dei punteggi. È consigliabile esaminare le pagine di risultati della ricerca usate in precedenza e che permettevano di ordinare i risultati in base a prezzo, data, classificazione o rilevanza. In Ricerca cognitiva di Azure, i profili di assegnazione dei punteggi possono essere usati per guidare l'opzione "pertinenza". La definizione di pertinenza è definita dall'utente, predicata sugli obiettivi aziendali e sul tipo di esperienza di ricerca che si vuole offrire.

Passaggi per l'aggiunta di un profilo di assegnazione dei punteggi

Per implementare un comportamento predefinito per l'assegnazione di punteggio, aggiungere un profilo di punteggio allo schema che definisce l'indice. È possibile avere fino a 100 profili di punteggio all'interno di un indice (vedere Limiti dei servizi ), ma è possibile specificare solo un profilo alla volta in ogni query.

  1. Iniziare con una definizione di indice. È possibile aggiungere e aggiornare i profili di punteggio in un indice esistente senza dover ricompilarlo. Usare una richiesta Update Index per pubblicare la revisione.

  2. Incollare nel modello fornito in questo articolo.

  3. Specificare un nome. I profili di punteggio sono facoltativi, ma quando se ne aggiunge uno è necessario specificare un nome. Assicurarsi di seguire le convenzioni di denominazione di Ricerca cognitiva per i campi (inizia con una lettera, evita caratteri speciali e parole riservate).

  4. Specificare i criteri di aumento. Un singolo profilo può contenere campi ponderati, funzioni o entrambi.

È consigliabile lavorare in modo iterativo, usando un set di dati che consente di dimostrare o disprovare l'efficacia di un determinato profilo.

I profili di assegnazione dei punteggi possono essere definiti in portale di Azure come illustrato nello screenshot seguente o a livello di codice tramite API REST o in SDK di Azure, ad esempio la classe ScoringProfile in Azure SDK per .NET.

Pagina Aggiungi profili di assegnazione dei punteggi

Uso di campi ponderati

Usare campi ponderati quando il contesto del campo è importante e le query sono ricerca full-text. Ad esempio, se una query include il termine "aeroporto", potrebbe essere necessario "aeroporto" nel campo Descrizione avere un peso maggiore rispetto al nome hotel.

I campi ponderati sono costituiti da un campo ricercabile e da un numero positivo usato come moltiplicatore. Se il punteggio di campo originale di HotelName è 3, il punteggio incrementato per tale campo diventa 6, contribuendo a un punteggio complessivo superiore per il documento padre stesso.

"scoringProfiles": [  
{  
  "name": "boostKeywords",  
  "text": {  
    "weights": {  
      "HotelName": 2,  
      "Description": 5 
    }  
  }  
}

Uso delle funzioni

Usare le funzioni quando i pesi relativi semplici non sono sufficienti o non si applicano, come accade in caso di distanza e freschezza, che sono calcoli sui dati numerici. È possibile specificare più funzioni per profilo di assegnazione dei punteggi.

Funzione Descrizione
"freschezza" Aumenta in base ai valori in un campo datetime (Edm.DateTimeOffset). Questa funzione ha un attributo "boostingDuration" in modo che sia possibile specificare un valore che rappresenta un intervallo di tempo su cui si verifica l'aumento.
"grandezza" Aumenta in base alla quantità elevata o bassa di un valore numerico. Gli scenari che richiedono questa funzione includono l'aumento della priorità in base a margine di profitto, prezzo massimo, prezzo minimo o conteggio di download. Questa funzione può essere usata solo con campi Edm.Double e Edm.Int. Per la funzione di grandezza, è possibile invertire l'intervallo, alto a basso, se si vuole che il modello inverso (ad esempio, aumentare i prezzi più bassi degli articoli con prezzo più alto). Dato un intervallo di prezzi da $100 a $1, si imposta "boostingRangeStart" a 100 e "boostingRangeEnd" a 1 per aumentare gli articoli a prezzo inferiore.
"distanza" Aumenta in base alla prossimità o alla posizione geografica. Questa funzione può essere usata solo con campi Edm.GeographyPoint .
"tag" Aumenta in base ai tag comuni sia ai documenti di ricerca che alle stringhe di query. I tag vengono forniti in un "tagParameter". Questa funzione può essere usata solo con campi di ricerca di tipo Edm.String e Collection(Edm.String).

Regole per l'uso delle funzioni

  • Le funzioni possono essere applicate solo ai campi che sono attributi come filtrabili.
  • Il tipo di funzione ("freschezza", "grandezza", "distanza", "tag") deve essere minuscolo.
  • Le funzioni non possono includere valori Null o vuoti.

Modello

Questa sezione illustra la sintassi e il modello per i profili di punteggio. Fare riferimento alla proprietà nella sezione successiva per le descrizioni degli attributi del profilo di assegnazione dei punteggi.

"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) "...", 

Informazioni di riferimento sulle proprietà

Attributo Descrizione
name Obbligatorio. Nome del profilo di punteggio. Segue le stesse convenzioni di denominazione di un campo. Deve iniziare con una lettera, non può contenere punti, punti o simboli @ e non può iniziare con la frase azureSearch (distinzione tra maiuscole e minuscole).
text Contiene la proprietà pesi.
weights Facoltativa. Coppie nome-valore che specificano un campo ricercabile e un numero intero positivo o a virgola mobile in base al quale aumentare il punteggio di un campo. L'intero o il numero positivo diventa un moltiplicatore per il punteggio del campo originale generato dall'algoritmo di classificazione. Ad esempio, se un punteggio di campo è 2 e il valore di peso è 3, il punteggio incrementato per il campo diventa 6. I punteggi di campo singoli vengono quindi aggregati per creare un punteggio di campo del documento, che viene quindi usato per classificare il documento nel set di risultati.
functions Facoltativa. La funzione di assegnazione del punteggio può essere applicata solo ai campi filtrabili.
tipo di funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Indica il tipo di funzione da usare. I valori validi includono magnitude, freshness, distance e tag. È possibile includere più funzioni in ogni profilo di punteggio. Il nome della funzione deve essere scritto in lettere minuscole.
aumento delle funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Numero positivo usato come moltiplicatore per un punteggio non elaborato. Non può essere uguale a 1.
nome campo di funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Una funzione di assegnazione di punteggio può essere applicata solo a campi che fanno parte della raccolta di campi dell'indice e che sono filtrabili. Ogni tipo di funzione introduce inoltre restrizioni aggiuntive (il valore freshness viene usato con campi datetime, il valore magnitude con campi di tipo Integer o Double e il valore distance con campi location). È possibile specificare solo un campo per ogni definizione di funzione. Ad esempio, per usare il valore magnitude due volte nello stesso profilo, sarà necessario includere due definizioni di magnitude, una per ogni campo.
interpolazione delle funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Definisce il coefficiente angolare in base al quale viene incrementato l'aumento di priorità del punteggio dall'inizio alla fine dell'intervallo. I valori validi includono Linear (predefinito), Constant, Quadratic e Logarithmic. Per informazioni dettagliate, vedere Impostare le interpolazioni .
grandezza delle funzioni > La funzione di assegnazione di punteggio in base al valore magnitude viene usata per modificare le classificazioni in base all'intervallo di valori per un campo numerico. Alcuni degli esempi di utilizzo più comuni di questo sono:

"Classificazioni star:" Modificare il punteggio in base al valore all'interno del campo "Classificazione star". Quando due elementi sono rilevanti, viene visualizzato per primo l'elemento con la classificazione superiore.
"Margin:" Quando due documenti sono rilevanti, un rivenditore potrebbe voler aumentare i documenti con margini più elevati prima.
"Numero di clic:" Per le applicazioni che tengono traccia delle azioni nei prodotti o nelle pagine, è possibile usare la grandezza per aumentare gli elementi che tendono a ottenere il traffico più grande.
"Scarica conteggi:" Per le applicazioni che tengono traccia dei download, la funzione di grandezza consente di aumentare gli elementi con la maggior parte dei download.
aumento della grandezza > delle funzioni > boostingRangeStart Imposta il valore iniziale dell'intervallo su cui è basato il calcolo della funzione magnitude. Il valore deve essere un numero intero o a virgola mobile. Per le classificazioni a stelle da 1 a 4, corrisponde a 1. Per i margini superiori al 50%, corrisponde a 50.
incrementi della grandezza > delle funzioniRangeEnd > Imposta il valore finale dell'intervallo su cui è basato il calcolo della funzione magnitude. Il valore deve essere un numero intero o a virgola mobile. Per le classificazioni a stelle da 1 a 4, corrisponde a 4.
> funzioni > costantiBoostBeyondRange I valori validi sono true o false (predefinito). Se impostato su true, l'aumento completo della priorità continuerà a essere applicato a documenti che includono un valore per il campo di destinazione maggiore rispetto al limite superiore dell'intervallo. Se false, l'aumento di priorità di questa funzione non verrà applicato ai documenti che includono un valore per il campo di destinazione che non rientra nell'intervallo.
freschezza delle funzioni > La funzione freshness per l'assegnazione di punteggio viene usata per modificare i punteggi di classificazione per gli elementi in base ai valori dei campi DateTimeOffset fields. Ad esempio, un elemento con una data più recente può essere classificato con una priorità maggiore rispetto agli elementi meno recenti.

È anche possibile classificare gli elementi come gli eventi del calendario con date future, in modo che gli elementi più vicini al presente possano essere classificati più alti degli elementi in futuro.

Nella versione del servizio corrente, una fine dell'intervallo verrà fissa all'ora corrente. L'altra fine è una volta nel passato in base all'aumentodurazione. Per aumentare un intervallo di volte in futuro, usare una spinta negativaDuration.

La frequenza in cui l'aumento cambia da un intervallo massimo e minimo è determinato dall'interpolazione applicata al profilo di assegnazione dei punteggi (vedere la figura seguente). Per invertire il fattore di aumento di priorità applicato, scegliere un fattore di aumento di priorità inferiore a 1.
funzioni > di > freschezza boostingDuration Imposta un periodo di scadenza, dopo il quale l'aumento di priorità non verrà più applicato a un determinato documento. Per informazioni sulla sintassi ed esempi, vedere Impostare boostingDuration nella sezione seguente.
distanza delle funzioni > La funzione di assegnazione dei punteggi della distanza viene usata per influire sul punteggio dei documenti in base alla vicinanza o alla distanza rispetto a una posizione geografica di riferimento. Il percorso di riferimento viene assegnato come parte della query in un parametro (usando il parametro di query scoringParameter) come lon,lat argomento.
riferimenti alla distanza > di funzioniPointParameter > Parametro da passare nelle query da usare come percorso di riferimento (usando il parametro di query scoringParameter).
funzioni di aumento > della distanzaDistance > Numero che indica la distanza, in chilometri, dalla posizione di riferimento in cui termina l'intervallo di aumento della priorità.
tag di funzioni > La funzione per l'assegnazione di punteggio viene usata per influire sul punteggio di documenti in base ai tag nei documenti e nelle query di ricerca. La priorità di documenti con tag in comune con la query di ricerca verrà aumentata. I tag per la query di ricerca vengono forniti come parametro di assegnazione dei punteggi in ogni richiesta di ricerca (usando il parametro di query scoringParameter).
> tag di funzioniParameter > Parametro da passare nelle query per specificare i tag per una richiesta specifica (usando il parametro di query scoringParameter). Il parametro è costituito da un elenco delimitato da virgole di termini interi. Se un tag specificato all'interno dell'elenco è un elenco delimitato da virgole, è possibile usare un normalizzatore di testo nel campo per rimuovere le virgole in fase di query (eseguire il mapping del carattere di virgole a uno spazio). Questo approccio "appiattisce" l'elenco in modo che tutti i termini siano una singola stringa lunga di termini delimitati da virgole.
funzione funzioniAggregazione > Facoltativa. Applicabile solo se vengono specificate funzioni. I valori validi includono: sum (default), average, minimum, maximum e firstMatching. Un punteggio di ricerca è un singolo valore calcolato da più variabili, incluse le funzioni multiple. Questo attributo indica il modo in cui gli aumenti di priorità di tutte le funzioni vengono combinati in un singolo aumento aggregato della priorità, che viene quindi applicato al punteggio di base del documento. Il punteggio di base dipende dal valore tf-idf calcolato dal documento e dalla query di ricerca.
defaultScoringProfile Quando si esegue una richiesta di ricerca, se non viene specificato alcun profilo di punteggio, verrà usato il punteggio predefinito (solo tf-idf).

È possibile eseguire l'override del valore predefinito predefinito, sostituendo un profilo personalizzato come quello da usare quando non viene specificato alcun profilo specifico nella richiesta di ricerca.

Impostare le interpolazioni

Le interpolazioni consentono di impostare la forma dell'inclinazione usata per il punteggio. Poiché il punteggio è indicato dal valore più alto al valore più basso, l'inclinazione diminuisce sempre, ma l'interpolazione determina la curva dell'inclinazione verso il basso. È possibile usare le interpolazioni seguenti:

Interpolazione Descrizione
linear Per gli elementi inclusi nell'intervallo max e min, l'aumento di priorità applicato all'elemento corrisponderà a un importo costantemente decrescente. L'interpolazione predefinita per un profilo di punteggio è lineare.
constant Per gli elementi inclusi nell'intervallo di inizio e di fine, ai risultati della classificazione verrà applicato un aumento di priorità costante.
quadratic Rispetto all'interpolazione lineare che prevede un aumento di priorità costantemente decrescente, l'interpolazione quadratica presenterà una riduzione iniziale a ritmo più ridotto e una riduzione di intervallo molto più elevato in prossimità della fine. Questa opzione di interpolazione non è consentita nelle funzioni di assegnazione dei tag.
logarithmic Rispetto all'interpolazione lineare che prevede un aumento di priorità costantemente decrescente, l'interpolazione logaritmica presenterà una riduzione iniziale a ritmo più elevato e una riduzione di intervallo molto più ridotto in prossimità della fine. Questa opzione di interpolazione non è consentita nelle funzioni di assegnazione dei tag.

Costante, lineare, quadratico, linee log10 sul grafico

Impostare boostingDuration

boostingDuration è un attributo della funzione freshness. Consente di impostare un periodo di scadenza, dopo il quale l'aumento di priorità non verrà più applicato a un determinato documento. Ad esempio, per aumentare la priorità di una linea di prodotti o una marca per un periodo promozionale di 10 giorni, è necessario specificare tale periodo come "P10D" per questi documenti.

boostingDuration deve essere formattato come valore XSD "dayTimeDuration" (un subset limitato di un valore di durata ISO 8601). Il modello per questo è: "P[nD][T[nH][nM][nS]]".

La tabella seguente fornisce alcuni esempi.

Durata boostingDuration
1 giorno "P1D"
2 giorni e 12 ore "P2DT12H"
15 minuti "PT15M"
30 giorni, 5 ore, 10 minuti e 6334 secondi "P30DT5H10M6.334S"

Per altri esempi, vedere il sito Web relativo ai tipi di dati dello schema XML (W3.org).

Esempio esteso

Nell'esempio seguente viene illustrato lo schema di un indice con due profili di assegnazione dei punteggi (boostGenre, newAndHighlyRated). Qualsiasi query eseguita in questo indice e che include uno dei profili come parametro di query userà il profilo per assegnare un punteggio al set di risultati.

Il boostGenre profilo usa campi di testo ponderati, aumento delle corrispondenze trovate nei campi albumTitle, genere e artistName. I campi vengono incrementati rispettivamente 1,5, 5 e 2. Al campo genre viene assegnata una priorità molto più alta rispetto agli altri, Se la ricerca viene eseguita sui dati che sono leggermente omogenei (come nel caso del "genere" nel musicstoreindex), potrebbe essere necessaria una varianza maggiore nei pesi relativi. Ad esempio, nel musicstoreindex 'rock' viene visualizzato come genere e in descrizioni di genere con frasi identiche. Se si vuole assegnare una priorità maggiore al genere rispetto alla descrizione del genere, il campo genre dovrà avere un peso relativo decisamente maggiore.

{  
  "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" ]  
    }  
  ]   
}  

Vedi anche