In Teil 1 dieser Reihe haben wir uns angesehen, wie wichtig eine korrekte Definition von Sprach-Analyzern in Elasticsearch ist. Mit einem passenden Analyzer – im Beispiel verwenden wir den «German Analyzer» – stellen wir sicher, dass die richtigen Dokumente gefunden werden und irrelevante Treffer (Noise) reduziert werden.
In diesem zweiten Teil geht es um die Reihenfolge der Treffer, die Relevanzbewertung (Scoring) und darum, wie wir über Queries und Boosting die Suchergebnisse gezielt verbessern können.
Zur Verdeutlichung nutzen wir einen kleinen Produktkatalog mit drei Shirts:
{
"title": "T-Shirt print",
"description": "Modernes T-Shirt in schwarz mit auffälligem Print, bequem geschnitten und vielseitig kombinierbar."
"title": "T-Shirt basic",
"description": "Schlichtes T-Shirt in grün, zeitloser Klassiker, angenehm zu tragen und ideal für den Alltag."
}
{
"title": "Sweatshirt basic",
"description": "Gemütliches Sweatshirt in grün, perfekt für kühle Tage, sportlich-lässig und vielseitig einsetzbar."
}
Alle Dokumente sind mit dem «German Analyzer» indexiert, sodass Umlaute, Gross-/Kleinschreibung und Wortstämme korrekt verarbeitet werden.
Erste Suchbesipiele
Schauen wir uns nun an, was das konkret bedeutet. Dafür setzen wir eine Suche nach «schwarzes Sweatshirt» ab.
Die Suchanfrage liefert zwei Treffer:
- Grünes Sweatshirt
- Schwarzes T-Shirt
Frage: Sollte überhaupt ein Treffer zurückgegeben werden? Und wenn nein, wieso?
Die Erklärung liegt im Matching-Verhalten: Standardmässig verbindet Elasticsearch Suchbegriffe mit einem ODER. Das bedeutet: schon wenn ein Teil der Anfrage passt («schwarz» oder «Sweatshirt»), wird ein Dokument zurückgegeben. Das T-Shirt enthält «schwarz», das Sweatshirt enthält «Sweatshirt» – beide erscheinen also in der Liste.
Zweites Suchbeispiel: Suche nach «grünes Shirt»
Die Ergebnisse erscheinen in folgender Reihenfolge:
- Grünes T-Shirt basic
- Schwarzes T-Shirt print
- Grünes Sweatshirt basic
Warum taucht das schwarze T-Shirt vor dem grünen Sweatshirt auf? Dafür gibt es zwei Gründe:
- Matching: Der Begriff «Shirt» matcht bei beiden T-Shirts, nicht aber beim Sweatshirt (wegen der Wortkomposition «Sweatshirt»).
- Scoring: Treffer in title werden höher bewertet als in description. Daher rutscht das schwarze T-Shirt nach oben, obwohl es nicht grün ist.
Hier zeigt sich, dass Ranking in Elasticsearch eine Mischung aus Matching und Relevanzbewertung ist.
Wie funktioniert Scoring in Elasticsearch?
Elasticsearch verwendet zur Relevanzberechnung standardmässig den BM25-Algorithmus, eine Weiterentwicklung von TF/IDF.
- TF (Term Frequency): Je häufiger ein Begriff in einem Dokument vorkommt, desto relevanter ist er für dieses Dokument.
- IDF (Inverse Document Frequency): Je seltener ein Begriff im gesamten Index vorkommt, desto stärker wird er gewichtet.
- BM25: Berücksichtigt zusätzlich die Dokumentlänge und eine Sättigung der Term-Häufigkeit.
Das Ergebnis: Jedes Dokument erhält einen Score, der die Relevanz ausdrückt. Dokumente mit höherem Score erscheinen weiter oben in den Suchresultaten.
Queries und Verbesserungen
Um das Ranking gezielt zu steuern, können wir mit unterschiedlichen Query-Typen arbeiten:
Multi-Match mit «cross field» und «AND»
- Alle Suchbegriffe müssen in einem Dokument vorkommen.
- Gut für präzisere Ergebnisse, aber riskant, wenn der Nutzer Tippfehler macht.
- Alle durchsuchten Felder müssen mit dem gleichen Analyzer indexiert sein.
Multi-Match (OR, Best Field, Fuzziness AUTO)
- Lässt auch ungenaue Eingaben zu.
- Beispiel: «Schwazes Tshirt» findet trotzdem «Schwarzes T-Shirt».
Phrase Prefix
- Unterstützt Autocomplete-Szenarien («grün T-» → «grünes T-Shirt»).
N-Gram Suche
- Besonders hilfreich bei Fuzzy-Suchen oder Teilbegriffen.
Boosting und Minimum Score
Neben den Query-Typen gibt es zwei weitere Stellschrauben:
Boosting: Bestimmte Felder (z. B. title) können stärker gewichtet werden, damit Treffer im Titel höher ranken als Treffer in der Beschreibung.
{
"multi_match": {
"query": "grünes Shirt",
"fields": ["title^2", "description"]
}
}
Minimum Score: Ergebnisse mit sehr niedrigem Score lassen sich herausfiltern.
Damit können wir verhindern, dass irrelevante Dokumente (z. B. wegen Fuzzy Matches) überhaupt angezeigt werden. Die Herausforderung: den richtigen Schwellenwert zu wählen – er hängt stark von den Daten und der Suchdomäne ab.
Fazit und Ausblick
Wir haben gesehen, wie Elasticsearch die Reihenfolge von Treffern über Matching und Scoring bestimmt – und wie wir mit Queries, Boosting und Minimum Score bessere Suchresultate erzielen können.
Im nächsten Teil der Serie geht es um den Einsatz von KI und Vektorsuche:
- Wie lassen sich Suchergebnisse semantisch verbessern?
- Welche Herausforderungen bringt Vektorsuche mit sich?
Bleiben Sie dran – es lohnt sich!
Über den Autor
Nicolas Karrer ist Lead Application Engineer bei Snowflake. Neben seiner Begeisterung für neue Technologien ist er Snowflake Urgestein, Fussball- und Eishockeyfan, Squash-Spieler und TV-Serien-Junkie.