Condivisione della tecnologia

Punteggio personalizzato Elasticsearch e punteggio con script

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.

1. Punteggio personalizzato (query sul punteggio della funzione)

1.1 Definizione e principio

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.

1.2 Funzioni di uso comune

Elasticsearch fornisce una varietà di funzioni integrate per il punteggio personalizzato, inclusi ma non limitati a:

  • peso: assegna un peso uniforme a tutti i documenti corrispondenti.
  • fattore_valore_campo: calcola la valutazione in base ai valori dei campi nel documento.
  • punteggio casuale: genera un punteggio casuale per il documento.
  • funzione_decadimento: Calcola il punteggio di attenuazione in base alla distanza tra il documento e un determinato punto (come posizione geografica, tempo, ecc.). Le funzioni di attenuazione comuni includono gaussiana (gauss), lineare (lineare), esponenziale (exp), ecc.
  • punteggio_script: utilizza script personalizzati per calcolare le valutazioni.

1.3 Esempio

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_scoreQuery 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"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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.

2. Punteggio della sceneggiatura

2.1 Definizione e principio

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.

2.2 Esempio

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_scorefunzione 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"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

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.

3. Riepilogo

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.