Teknologian jakaminen

Elasticsearch mukautettu pisteytys ja käsikirjoitettu pisteytys

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Elasticsearchissa oletusarvostelumekanismi (kuten BM25-algoritmi) voi tarjota hyvän hakutulosten sijoituksen useimmissa tapauksissa. Joissakin erityisissä skenaarioissa saatamme kuitenkin joutua lajittelemaan hakutuloksia tarkemmin liiketoiminnan tarpeiden mukaan. Tällä hetkellä Elasticsearch tarjoaa mukautettuja pisteytystoimintoja (Function Score Query) ja komentosarjan pisteytystoimintoja (Script Score) vastaamaan näihin monimutkaisiin tarpeisiin. Tässä artikkelissa kerrotaan, kuinka pisteytystä ja skriptien pisteytystä mukautetaan Elasticsearchissa.

1. Muokattu pisteytys (toimintopistekysely)

1.1 Määritelmä ja periaate

Mukautetun pisteytyksen avulla voimme muokata kunkin asiakirjan oletuspistemäärää ennalta määritettyjen funktioiden perusteella. Nämä funktiot voivat laskea uusia luokituksia dokumentin kenttäarvojen, kyselyehtojen tai muiden tekijöiden perusteella. Lopulta Elasticsearch yhdistää alkuperäisen pistemäärän mukautettuun tulokseen määrittääkseen hakutulosten sijoituksen.

1.2 Yleiset toiminnot

Elasticsearch tarjoaa useita sisäänrakennettuja toimintoja mukautettuun pisteytykseen, mukaan lukien, mutta ei rajoittuen:

  • paino: Määritä kaikille vastaaville asiakirjoille yhtenäinen paino.
  • field_value_factor: Laske luokitus asiakirjan kenttäarvojen perusteella.
  • random_score: Luo asiakirjalle satunnainen pistemäärä.
  • decay_function: Laske vaimennuspisteet asiakirjan ja tietyn pisteen välisen etäisyyden perusteella (kuten maantieteellinen sijainti, aika jne. Yleisiä vaimennusfunktioita ovat Gauss- (gauss), lineaarinen (lineaarinen), eksponentiaalinen (exp) jne.
  • script_score: Käytä mukautettuja komentosarjoja arvioiden laskemiseen.

1.3 Esimerkki

Oletetaan, että meillä on verkkokauppasivusto ja käyttäjät haluavat ottaa huomioon sekä tuotteen hinnan että luokitukset tuotteita etsiessään.voimme käyttääfunction_scoreKysely tämän vaatimuksen saavuttamiseksi:

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

Tässä esimerkissä käytämmefield_value_factor Toiminto laskee mukautetun arvion tuotteen hinnan ja arvosanan perusteella. Hinnat käyttävät vastavuoroista laskua (reciprocal ), jotta halvemmalla tuotteella on korkeampi pistemäärä. Lopuksi lisäämme molempien toimintojen arvosanat ja korvaamme alkuperäiset arvosanat.

2. Käsikirjoituksen pisteet

2.1 Määritelmä ja periaate

Komentosarjan pisteytyksen avulla voimme käyttää mukautettua komentosarjakieltä (kuten Kivutonta) dokumentin pistemäärän laskemiseen. Tämä lähestymistapa tarjoaa suurimman joustavuuden ja voi laskea pisteet melkein minkä tahansa logiikan perusteella.

2.2 Esimerkki

Oletetaan, että haluamme muuttaa luokitusta tuotteen varastomäärän perusteella. Tuotteilla, joilla on vähemmän varastoa, on korkeammat arvosanat.voimme käyttääscript_scoretoiminto tämän vaatimuksen saavuttamiseksi:

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

Tässä esimerkissä käytämme Painless-skriptikieltä luokituksen laskemiseen. Skripti määrittää tuotteen varastomäärän (doc['stock'].value ) laskee pistemäärän, mitä suurempi varastomäärä, sitä pienempi pistemäärä. Kerromme tämän pisteen alkuperäisellä luokittelulla hakutulosten lopullisen sijoituksen säätämiseksi.

3. Yhteenveto

Mukautettu pisteytys ja komentosarjapisteytys ovat Elasticsearchin tehokkaita ominaisuuksia, joiden avulla voimme tarkentaa hakutuloksia liiketoiminnan tarpeiden mukaan. Näitä toimintoja järkevästi käyttämällä voimme parantaa käyttökokemusta ja vastata käyttäjien monipuolisiin tarpeisiin. On kuitenkin huomattava, että mukautettu pisteytys ja komentosarjapisteytys voivat lisätä kyselyn monimutkaisuutta ja laskentakustannuksia, joten etuja ja haittoja on punnittava käytännön sovelluksissa ja käytettävä varoen.