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.
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.
Elasticsearch tarjoaa useita sisäänrakennettuja toimintoja mukautettuun pisteytykseen, mukaan lukien, mutta ei rajoittuen:
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_score
Kysely 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"
}
}
}
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.
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.
Oletetaan, että haluamme muuttaa luokitusta tuotteen varastomäärän perusteella. Tuotteilla, joilla on vähemmän varastoa, on korkeammat arvosanat.voimme käyttääscript_score
toiminto 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"
}
}
}
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.
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.