informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Di Elasticsearch, mekanisme penilaian default (seperti algoritma BM25) dapat memberikan peringkat hasil pencarian yang baik dalam banyak kasus. Namun, dalam beberapa skenario tertentu, kami mungkin perlu melakukan penyortiran hasil pencarian yang lebih baik berdasarkan kebutuhan bisnis. Saat ini, Elasticsearch menyediakan fungsi penilaian khusus (Kueri Skor Fungsi) dan penilaian skrip (Skor Skrip) untuk memenuhi kebutuhan kompleks ini. Artikel ini akan merinci cara menyesuaikan penilaian dan penilaian skrip di Elasticsearch.
Penilaian khusus memungkinkan kita mengubah skor default untuk setiap dokumen berdasarkan serangkaian fungsi yang telah ditentukan sebelumnya. Fungsi-fungsi ini dapat menghitung peringkat baru berdasarkan nilai bidang dokumen, kriteria kueri, atau faktor lainnya. Pada akhirnya, Elasticsearch akan menggabungkan skor asli dengan skor khusus untuk menentukan peringkat hasil pencarian.
Elasticsearch menyediakan berbagai fungsi bawaan untuk penilaian khusus, termasuk namun tidak terbatas pada:
Misalkan kita memiliki situs web e-niaga, dan pengguna ingin mempertimbangkan harga dan peringkat produk saat mencari produk.kita bisa gunakanfunction_score
Permintaan untuk mencapai persyaratan ini:
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"
}
}
}
Dalam contoh ini kami menggunakanfield_value_factor
Fungsi ini menghitung peringkat khusus berdasarkan harga dan peringkat item. Harga menggunakan peluruhan timbal balik (reciprocal
), sehingga produk dengan harga lebih rendah mempunyai skor yang lebih tinggi; Terakhir, kami menambahkan peringkat kedua fungsi dan mengganti peringkat aslinya.
Penilaian skrip memungkinkan kita menggunakan bahasa skrip khusus (seperti Painless) untuk menghitung skor dokumen. Pendekatan ini memberikan fleksibilitas terbesar dan dapat menghitung skor berdasarkan hampir semua logika.
Misalkan kita ingin menyesuaikan rating berdasarkan jumlah persediaan produk, Produk dengan persediaan lebih sedikit akan memiliki rating lebih tinggi.kita bisa gunakanscript_score
berfungsi untuk mencapai persyaratan ini:
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"
}
}
}
Dalam contoh ini, kami menggunakan bahasa skrip Painless untuk menghitung rating. Script menentukan jumlah persediaan produk (doc['stock'].value
) menghitung skor. Semakin besar kuantitas inventaris, semakin rendah skornya; semakin kecil kuantitas inventaris, semakin tinggi skornya. Kami kemudian mengalikan skor ini dengan peringkat asli untuk menyesuaikan peringkat akhir hasil pencarian.
Penilaian khusus dan penilaian skrip adalah fitur canggih yang disediakan oleh Elasticsearch, yang memungkinkan kami menyaring hasil pencarian berdasarkan kebutuhan bisnis. Dengan menggunakan fungsi-fungsi ini secara rasional, kami dapat meningkatkan pengalaman pengguna dan memenuhi beragam kebutuhan pengguna. Namun, perlu dicatat bahwa penilaian khusus dan penilaian skrip dapat meningkatkan kompleksitas kueri dan biaya komputasi, sehingga pro dan kontra perlu dipertimbangkan dalam aplikasi praktis dan digunakan dengan hati-hati.