2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
In Elasticsearch kann der Standardbewertungsmechanismus (z. B. der BM25-Algorithmus) in den meisten Fällen für ein gutes Ranking der Suchergebnisse sorgen. In einigen spezifischen Szenarien müssen wir jedoch möglicherweise eine verfeinerte Sortierung der Suchergebnisse basierend auf den Geschäftsanforderungen durchführen. Derzeit bietet Elasticsearch benutzerdefinierte Scoring- (Function Score Query) und Skript-Scoring-Funktionen (Script Score), um diese komplexen Anforderungen zu erfüllen. In diesem Artikel erfahren Sie, wie Sie die Bewertung und Skriptbewertung in Elasticsearch anpassen.
Mit der benutzerdefinierten Bewertung können wir die Standardbewertung für jedes Dokument basierend auf einer Reihe vordefinierter Funktionen ändern. Diese Funktionen können neue Bewertungen basierend auf den Feldwerten des Dokuments, Abfragekriterien oder anderen Faktoren berechnen. Letztendlich kombiniert Elasticsearch den ursprünglichen Score mit dem benutzerdefinierten Score, um das Ranking der Suchergebnisse zu bestimmen.
Elasticsearch bietet eine Vielzahl integrierter Funktionen für benutzerdefiniertes Scoring, darunter unter anderem:
Angenommen, wir haben eine E-Commerce-Website und Benutzer möchten bei der Suche nach Produkten sowohl den Preis als auch die Bewertungen des Produkts berücksichtigen.wir können benutzenfunction_score
Abfrage zum Erreichen dieser Anforderung:
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 diesem Beispiel verwenden wirfield_value_factor
Die Funktion berechnet eine benutzerdefinierte Bewertung basierend auf dem Preis und der Bewertung des Artikels. Preise nutzen den reziproken Zerfall (reciprocal
), sodass das Produkt mit einem niedrigeren Preis eine höhere Bewertung hat; die Bewertung verwendet direkt den Feldwert. Abschließend addieren wir die Bewertungen beider Funktionen und ersetzen die ursprünglichen Bewertungen.
Die Skriptbewertung ermöglicht es uns, eine benutzerdefinierte Skriptsprache (z. B. Painless) zu verwenden, um die Bewertung eines Dokuments zu berechnen. Dieser Ansatz bietet die größte Flexibilität und kann Scores basierend auf nahezu jeder Logik berechnen.
Angenommen, wir möchten die Bewertung basierend auf der Lagerbestandsmenge des Produkts anpassen. Produkte mit weniger Lagerbestand erhalten höhere Bewertungen.wir können benutzenscript_score
Funktion, um diese Anforderung zu erfüllen:
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 diesem Beispiel verwenden wir die Skriptsprache Painless, um die Bewertung zu berechnen. Das Skript ermittelt die Lagerbestandsmenge des Produkts (doc['stock'].value
) berechnet einen Score. Je größer die Lagerbestandsmenge, desto niedriger der Score. Anschließend multiplizieren wir diese Punktzahl mit der ursprünglichen Bewertung, um die endgültige Rangfolge der Suchergebnisse anzupassen.
Benutzerdefiniertes Scoring und Skript-Scoring sind leistungsstarke Funktionen von Elasticsearch, die es uns ermöglichen, Suchergebnisse entsprechend den Geschäftsanforderungen zu verfeinern. Durch die rationelle Nutzung dieser Funktionen können wir die Benutzererfahrung verbessern und den unterschiedlichen Bedürfnissen der Benutzer gerecht werden. Es ist jedoch zu beachten, dass benutzerdefiniertes Scoring und Skript-Scoring die Abfragekomplexität und die Rechenkosten erhöhen können, sodass die Vor- und Nachteile in praktischen Anwendungen abgewogen und mit Vorsicht verwendet werden müssen.