le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
In Elasticsearch, il meccanismo di punteggio predefinito (come l'algoritmo BM25) può fornire nella maggior parte dei casi un buon posizionamento dei risultati di ricerca. Tuttavia, in alcuni scenari specifici, potrebbe essere necessario eseguire un ordinamento più preciso dei risultati di ricerca in base alle esigenze aziendali. Al momento, Elasticsearch fornisce funzioni di punteggio personalizzato (Function Score Query) e punteggio di script (Script Score) per soddisfare queste esigenze complesse. Questo articolo descrive in dettaglio come personalizzare il punteggio e il punteggio degli script in Elasticsearch.
Il punteggio personalizzato ci consente di modificare il punteggio predefinito per ciascun documento in base a una serie di funzioni predefinite. Queste funzioni possono calcolare nuove classificazioni in base ai valori dei campi del documento, ai criteri di query o ad altri fattori. Alla fine, Elasticsearch combinerà il punteggio originale con il punteggio personalizzato per determinare il ranking dei risultati di ricerca.
Elasticsearch fornisce una varietà di funzioni integrate per il punteggio personalizzato, inclusi ma non limitati a:
Supponiamo di avere un sito di e-commerce e che gli utenti desiderino considerare sia il prezzo che le valutazioni del prodotto durante la ricerca dei prodotti.possiamo usarefunction_score
Query per soddisfare questo requisito:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"field_value_factor": {
"field": "price",
"modifier": "reciprocal",
"params": {
"scale": 100
}
}
},
{
"field_value_factor": {
"field": "rating",
"missing": 1.0
}
}
],
"score_mode": "sum",
"boost_mode": "replace"
}
}
}
In questo esempio usiamofield_value_factor
La funzione calcola una valutazione personalizzata in base al prezzo e alla valutazione dell'articolo. I prezzi utilizzano il decadimento reciproco (reciprocal
), in modo che il prodotto con prezzo più basso abbia un punteggio più alto; Infine, aggiungiamo le valutazioni di entrambe le funzioni e sostituiamo le valutazioni originali.
Il punteggio dello script ci consente di utilizzare un linguaggio di scripting personalizzato (come Painless) per calcolare il punteggio di un documento. Questo approccio offre la massima flessibilità e può calcolare i punteggi in base a quasi tutte le logiche.
Supponiamo di voler modificare la valutazione in base alla quantità di inventario del prodotto. I prodotti con meno inventario avranno valutazioni più elevate.possiamo usarescript_score
funzione per soddisfare questo requisito:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "Math.max(0, 1 - doc['stock'].value / 100.0)",
"lang": "painless"
}
}
}
],
"score_mode": "multiply",
"boost_mode": "replace"
}
}
}
In questo esempio, utilizziamo il linguaggio di scripting Painless per calcolare la valutazione. Lo script determina la quantità di inventario del prodotto (doc['stock'].value
) calcola un punteggio. Maggiore è la quantità di inventario, minore è il punteggio; minore è la quantità di inventario, maggiore è il punteggio. Moltiplichiamo quindi questo punteggio con la valutazione originale per modificare la classifica finale dei risultati di ricerca.
Il punteggio personalizzato e il punteggio degli script sono potenti funzionalità fornite da Elasticsearch, che ci consentono di perfezionare i risultati della ricerca in base alle esigenze aziendali. Utilizzando razionalmente queste funzioni, possiamo migliorare l'esperienza dell'utente e soddisfare le diverse esigenze degli utenti. Tuttavia, è opportuno notare che il punteggio personalizzato e quello dello script possono aumentare la complessità delle query e i costi computazionali, quindi i pro e i contro devono essere valutati nelle applicazioni pratiche e utilizzati con cautela.