Relevance Scoring: BM25 wirklich verstehen
AI generated
_doc
_index
Elasticsearch · OpenSearch · Relevance Scoring
Relevance Scoring
BM25 wirklich verstehen

BM25 ist der Standard-Scoring-Algorithmus von Elasticsearch und OpenSearch, doch die meisten Entwickler kennen nur den Namen, nicht die Mechanik dahinter. Termhaeufigkeit, inverse Dokumenthaeufigkeit und Feldlaengen-Normalisierung bestimmen gemeinsam, warum ein Dokument hoeher rankt als ein anderes, und wer diese drei Faktoren versteht, kann Relevanzprobleme gezielt diagnostizieren statt nur zu raten.

17 Min. Lesezeit BM25 · TF-IDF · Termhaeufigkeit · IDF · Feldlaengen-Normalisierung Elasticsearch 8.x · OpenSearch 2.x

1. Warum Relevance Scoring ueberhaupt notwendig ist

Sobald eine Suchanfrage mehr als eine Handvoll Treffer liefert, reicht es nicht, nur zu wissen, welche Dokumente passen, es muss auch entschieden werden, in welcher Reihenfolge sie angezeigt werden. Genau dafuer existiert Relevance Scoring: jedes Treffer-Dokument bekommt einen numerischen Score, der ausdrueckt, wie gut es zur Suchanfrage passt, und die Ergebnisliste wird absteigend nach diesem Score sortiert. Der Algorithmus, der diesen Score in Elasticsearch und OpenSearch standardmaessig berechnet, heisst BM25, kurz fuer "Best Matching 25", eine Bezeichnung, die auf eine Reihe von Retrieval-Funktionen aus der Informationsretrieval-Forschung zurueckgeht.

BM25 loeste in Elasticsearch ab Version 5 das aeltere TF-IDF-basierte Scoring als Standard ab, weil es in der Praxis robustere Relevanzergebnisse liefert, besonders bei Dokumenten unterschiedlicher Laenge. Wer verstehen will, warum ein bestimmtes Produkt bei einer Suche vor einem anderen erscheint, muss verstehen, aus welchen Bestandteilen sich der BM25-Score zusammensetzt: Termhaeufigkeit, inverse Dokumenthaeufigkeit und Feldlaengen-Normalisierung.

Der Name BM25 selbst verraet bereits einen Teil der Geschichte: er stammt aus einer Serie von experimentellen Retrieval-Funktionen namens "Okapi", die in den 1980er- und 1990er-Jahren am Londoner City University College entwickelt wurden, wobei die 25. Variante sich als besonders robust erwies und seither als De-facto-Standard in der Textsuche etabliert ist. Diese jahrzehntelange Praxiserprobung ist ein wesentlicher Grund, warum BM25 heute in praktisch jeder modernen Suchmaschine, nicht nur in Elasticsearch, als Ausgangspunkt fuer Relevanz-Scoring dient.

Diese drei Bestandteile sind keine akademische Spielerei, sie haben direkte praktische Konsequenzen. Ein Nutzer, der sich fragt, warum ein Produkt mit dem Suchbegriff im Titel nicht ganz oben steht, findet die Antwort fast immer in einem dieser drei Faktoren. Die folgenden Abschnitte erklaeren jeden davon einzeln und zeigen anschliessend, wie sie in der vollstaendigen BM25-Formel zusammenwirken.

Wichtig ist auch die Abgrenzung: BM25 ersetzt nicht die Bool Query oder die Match Query, sondern ergaenzt sie. Waehrend Bool Query und Match Query bestimmen, welche Dokumente ueberhaupt als Treffer infrage kommen, bestimmt BM25 ausschliesslich die Reihenfolge dieser bereits feststehenden Treffermenge. Diese klare Trennung zwischen Treffermenge und Sortierung ist ein zentrales Architekturprinzip von Elasticsearch, das sich durch die gesamte Query DSL zieht.

2. Termhaeufigkeit: wie oft kommt der Begriff vor

Die Termhaeufigkeit, im Englischen Term Frequency oder TF, misst, wie oft ein Suchbegriff in einem bestimmten Dokument beziehungsweise Feld vorkommt. Die Grundintuition dahinter ist einfach: ein Dokument, das den Suchbegriff dreimal enthaelt, ist vermutlich relevanter fuer diesen Begriff als ein Dokument, das ihn nur einmal enthaelt. BM25 nutzt diese Termhaeufigkeit als einen der zentralen Bausteine des Scores, aber anders als bei einer naiven linearen Zaehlung saettigt der Beitrag der Termhaeufigkeit mit steigender Haeufigkeit.

Diese Saettigung ist ein entscheidender Unterschied zu einfacheren Modellen: der Sprung von einem auf zwei Vorkommen erhoeht den Score deutlich staerker als der Sprung von zehn auf elf Vorkommen. Ohne diese Saettigung koennte ein Dokument, das einen Suchbegriff kuenstlich hundertmal wiederholt, unrealistisch hoch ranken, obwohl es inhaltlich nicht relevanter ist als ein Dokument mit drei natuerlichen Erwaehnungen. BM25 begegnet diesem Problem mit einer nichtlinearen Funktion, die den Termhaeufigkeits-Beitrag nach oben begrenzt.

In der Praxis bedeutet das: die Termhaeufigkeit alleine erklaert selten, warum ein Dokument einen hoeheren Score als ein anderes bekommt, sobald beide den Suchbegriff mehrfach enthalten. Der Unterschied zwischen wenigen und sehr vielen Vorkommen wird durch die Saettigung eingeebnet, was BM25 robuster gegenueber Keyword-Stuffing macht als aeltere, rein lineare Scoring-Modelle.


GET /articles/_search
{
  "query": {
    "match": { "content": "elasticsearch" }
  },
  "explain": true
}
// The explain output shows the raw term frequency per document
// and how BM25's saturation function dampens its contribution

3. Inverse Dokumenthaeufigkeit: Seltenheit als Signal

Die inverse Dokumenthaeufigkeit, im Englischen Inverse Document Frequency oder IDF, misst, wie selten ein Begriff ueber die gesamte Dokumentenmenge hinweg vorkommt. Begriffe, die in fast jedem Dokument auftauchen, wie "und" oder "der", tragen wenig zur Unterscheidung zwischen Dokumenten bei und bekommen einen niedrigen IDF-Wert. Begriffe, die nur in wenigen Dokumenten vorkommen, sind hingegen aussagekraeftiger fuer die Relevanzbestimmung und bekommen einen hohen IDF-Wert.

Bei einer Mehrwort-Suchanfrage wie "wasserdichte laufschuhe" bedeutet das konkret: wenn "laufschuhe" in vielen Produkten vorkommt, "wasserdicht" aber nur in wenigen, dann traegt ein Treffer auf "wasserdicht" staerker zum Gesamt-Score bei als ein Treffer auf "laufschuhe", weil das seltenere Wort mehr Unterscheidungskraft besitzt. Dieses Prinzip stammt urspruenglich aus dem klassischen TF-IDF-Modell und wurde von BM25 uebernommen und mathematisch verfeinert.

Die inverse Dokumenthaeufigkeit wird pro Shard beziehungsweise standardmaessig ueber den gesamten Index berechnet, abhaengig von der Elasticsearch-Version und Konfiguration. Bei stark unausgeglichenen Shards kann das zu leicht unterschiedlichen Scores fuer identische Suchanfragen fuehren, ein Effekt, der in der Praxis meist vernachlaessigbar ist, aber bei sehr kleinen Indizes mit wenigen Shards sichtbar werden kann.

Fuer sehr kleine Indizes, bei denen dieser Shard-Effekt tatsaechlich stoert, bietet Elasticsearch den Parameter dfs_query_then_fetch als Suchtyp an, der die Dokumenthaeufigkeit vor der eigentlichen Suche global ueber alle Shards hinweg berechnet, statt sich auf lokale Shard-Statistiken zu verlassen. Dieser Modus ist rechenintensiver, liefert dafuer aber konsistentere Scores, was besonders bei kleinen Testumgebungen mit wenigen Dokumenten pro Shard einen spuerbaren Unterschied machen kann.


GET /products/_search
{
  "query": {
    "match": { "title": "wasserdichte laufschuhe" }
  }
}
// "wasserdicht" appears in fewer documents than "laufschuhe"
// its higher IDF value gives it more weight in the final score

4. Feldlaengen-Normalisierung: kurze gegen lange Felder

Die Feldlaengen-Normalisierung gleicht einen systematischen Effekt aus: laengere Felder haben statistisch eine hoehere Wahrscheinlichkeit, einen Suchbegriff mehrfach zu enthalten, einfach weil sie mehr Text enthalten. Ohne Normalisierung wuerden lange Produktbeschreibungen automatisch besser ranken als kurze, praezise Titel, selbst wenn der kurze Titel inhaltlich viel gezielter zum Suchbegriff passt. BM25 gleicht das aus, indem die Termhaeufigkeit relativ zur durchschnittlichen Feldlaenge im Index bewertet wird.

Ein Dokument mit einem kurzen Titelfeld, das den Suchbegriff einmal enthaelt, bekommt dadurch tendenziell einen hoeheren Score-Beitrag als ein Dokument mit einem langen Beschreibungsfeld, das denselben Begriff einmal enthaelt, weil die relative Dichte des Begriffs im kurzen Feld hoeher ist. Dieser Effekt ist einer der Gruende, warum eine Suche nach einem exakten Produktnamen fast immer das passende Produkt ganz oben zeigt, selbst wenn andere Dokumente den Begriff in laengeren Texten ebenfalls enthalten.

Gesteuert wird dieser Effekt ueber den Parameter b in der BM25-Konfiguration, der die Staerke der Feldlaengen-Normalisierung bestimmt. Ein Wert von 0 deaktiviert die Normalisierung vollstaendig, ein Wert von 1 wendet sie vollstaendig an. Der Standardwert in Elasticsearch liegt bei 0.75, ein empirisch bewaehrter Kompromiss, der in den meisten Anwendungsfaellen gute Ergebnisse liefert.

5. Die BM25-Formel im Detail

Die vollstaendige BM25-Formel kombiniert Termhaeufigkeit, inverse Dokumenthaeufigkeit und Feldlaengen-Normalisierung zu einem einzigen Score pro Term und Dokument, der anschliessend ueber alle Terme der Suchanfrage summiert wird. Vereinfacht dargestellt sieht die Formel fuer einen einzelnen Term wie folgt aus: score = IDF * (tf * (k1 + 1)) / (tf + k1 * (1 - b + b * fieldLength / avgFieldLength)). Die Konstanten k1 und b steuern dabei die Saettigung der Termhaeufigkeit beziehungsweise die Staerke der Feldlaengen-Normalisierung.

Der Zaehler der Formel, tf * (k1 + 1), wird durch den Nenner geteilt, der die Saettigung implementiert: je hoeher tf wird, desto naeher naehert sich der Bruch dem Wert k1 + 1 an, ohne ihn jemals zu erreichen. Genau diese asymptotische Eigenschaft ist die mathematische Umsetzung der Saettigung, die im vorherigen Abschnitt beschrieben wurde. Der Term 1 - b + b * fieldLength / avgFieldLength im Nenner ist die Feldlaengen-Normalisierung: bei einem Feld, das laenger ist als der Durchschnitt, waechst dieser Term und daempft dadurch den Score, bei einem kuerzeren Feld sinkt er und verstaerkt den Score relativ.

Fuer eine Mehrwort-Suchanfrage berechnet Elasticsearch diesen Score fuer jeden Term einzeln und summiert die Ergebnisse zum Gesamt-Score des Dokuments. Diese Summenbildung erklaert, warum Dokumente, die mehrere Suchbegriffe enthalten, tendenziell hoeher ranken als Dokumente, die nur einen enthalten, unabhaengig davon, wie oft der einzelne Begriff vorkommt.


PUT /products
{
  "settings": {
    "index": {
      "similarity": {
        "custom_bm25": {
          "type": "BM25",
          "k1": 1.2,
          "b": 0.75
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": { "type": "text", "similarity": "custom_bm25" }
    }
  }
}
// k1 controls term frequency saturation, b controls field length normalization
// these defaults match Elasticsearch's out-of-the-box BM25 configuration

6. BM25 gegenueber klassischem TF-IDF

Vor Elasticsearch 5 war das klassische TF-IDF-Modell der Standard-Scoring-Algorithmus, und BM25 wird oft als "Weiterentwicklung" von TF-IDF beschrieben. Der zentrale Unterschied liegt in der Behandlung der Termhaeufigkeit: klassisches TF-IDF verwendet meist eine Quadratwurzel-Funktion, um die Termhaeufigkeit zu daempfen, waehrend BM25 eine explizite Saettigungsfunktion mit dem konfigurierbaren Parameter k1 nutzt. Dieser Unterschied macht BM25 kontrollierbarer und in der Praxis widerstandsfaehiger gegenueber kuenstlich wiederholten Suchbegriffen.

Ein zweiter wichtiger Unterschied betrifft die Feldlaengen-Normalisierung: klassisches TF-IDF beruecksichtigt die Feldlaenge zwar auch, aber weniger explizit und ohne den einstellbaren Parameter b. BM25 macht die Staerke der Laengennormalisierung zu einem expliziten, tunbaren Parameter, was in heterogenen Datensaetzen mit stark unterschiedlichen Feldlaengen, etwa kurzen Produkttiteln neben langen Freitext-Beschreibungen, spuerbar bessere Ergebnisse liefert.

In der Praxis zeigt sich der Unterschied zwischen BM25 und TF-IDF am deutlichsten bei sehr haeufigen Suchbegriffen: TF-IDF neigt dazu, Dokumenten mit vielen Wiederholungen eines Begriffs unverhaeltnismaessig hohe Scores zu geben, waehrend BM25 durch die staerkere Saettigung diesen Effekt abmildert. Deshalb ist BM25 seit Elasticsearch 5 der Standard und wird auch von OpenSearch als Default-Similarity-Algorithmus verwendet.

Eigenschaft Klassisches TF-IDF BM25
Termhaeufigkeits-Saettigung Quadratwurzel, weniger kontrollierbar Explizite Funktion mit Parameter k1
Feldlaengen-Normalisierung Implizit, kaum einstellbar Expliziter Parameter b, tunbar
Verhalten bei Keyword-Stuffing Anfaelliger fuer unverhaeltnismaessige Scores Robuster durch staerkere Saettigung
Standard seit Elasticsearch bis Version 4 Elasticsearch ab Version 5, OpenSearch Default

7. Die Parameter k1 und b feinjustieren

Die BM25-Parameter k1 und b lassen sich auf Index-Ebene ueber eine eigene Similarity-Konfiguration anpassen. k1 steuert, wie schnell die Termhaeufigkeit saettigt: ein hoeherer Wert erlaubt mehr Wiederholungen, bevor der Score-Zuwachs abflacht, ein niedrigerer Wert laesst den Score schon bei wenigen Wiederholungen abflachen. Der Standardwert von 1.2 ist ein bewaehrter Ausgangspunkt, der in den meisten Anwendungsfaellen nicht angepasst werden muss.

Der Parameter b steuert die Staerke der Feldlaengen-Normalisierung, wie im vierten Abschnitt beschrieben. Fuer Anwendungsfaelle, in denen Feldlaenge kein relevantes Signal ist, etwa bei kurzen, gleichfoermigen Log-Nachrichten, kann es sinnvoll sein, b auf einen niedrigeren Wert zu setzen oder sogar auf 0, um die Normalisierung faktisch zu deaktivieren. Umgekehrt kann bei Datensaetzen mit stark variierender Feldlaenge ein hoeherer b-Wert die Relevanzergebnisse verbessern.

Wichtig ist, Aenderungen an k1 und b nicht blind vorzunehmen, sondern anhand konkreter Testfaelle mit realen Suchanfragen und erwarteten Ergebnissen zu evaluieren. Eine Aenderung an der Similarity-Konfiguration erfordert ausserdem eine Reindexierung oder zumindest eine Aktualisierung der betroffenen Felder, da die Konfiguration zur Indexzeit wirksam wird.

8. Score-Berechnung mit der Explain-API nachvollziehen

Die explain-Option in der Search-API ist das wichtigste Werkzeug, um den BM25-Score eines Dokuments nachzuvollziehen. Mit "explain": true in der Suchanfrage liefert Elasticsearch fuer jedes Treffer-Dokument eine detaillierte Aufschluesselung, welche Teil-Scores aus welchen Termen stammen, inklusive der einzelnen Werte fuer Termhaeufigkeit, inverse Dokumenthaeufigkeit und Feldlaengen-Normalisierung. Diese Aufschluesselung macht sichtbar, warum ein Dokument einen bestimmten Score hat und ermoeglicht, gezielt an den richtigen Stellschrauben zu drehen.

Alternativ liefert der dedizierte _explain-Endpunkt fuer ein einzelnes Dokument dieselbe Information, ohne die gesamte Trefferliste durchsuchen zu muessen. Beide Werkzeuge sind unverzichtbar, wenn Relevanzprobleme auftreten, etwa wenn ein Nutzer meldet, dass ein offensichtlich passendes Produkt bei einer Suche nicht ganz oben erscheint. Die Explain-Ausgabe zeigt dann exakt, welcher der drei BM25-Bestandteile fuer den niedrigeren Score verantwortlich ist.

In der Praxis lohnt es sich, die Explain-Ausgabe nicht nur punktuell bei akuten Beschwerden zu nutzen, sondern als festen Bestandteil eines Relevanz-Testprozesses zu etablieren. Ein kleines Set an reprasentativen Testanfragen mit bekannten, erwarteten Top-Treffern laesst sich nach jeder Aenderung an Mapping, Analyzer oder Similarity-Konfiguration automatisiert gegen die Explain-Ausgabe pruefen, sodass Regressionen in der Relevanz auffallen, bevor Nutzer sie bemerken.

Mironsoft

Elasticsearch- und OpenSearch-Suchloesungen fuer anspruchsvolle Datenmengen

Relevante Produkte, die nicht oben in der Suche erscheinen?

Wir analysieren euren BM25-Score mit der Explain-API, tunen k1 und b fuer euer Sortiment und beheben Relevanzprobleme, die Nutzer sonst zur Konkurrenz treiben.

Scoring-Audit

BM25-Score realer Suchanfragen mit der Explain-API nachvollziehen

Parameter-Tuning

k1 und b anhand konkreter Testfaelle fuer euer Sortiment kalibrieren

Relevanz-Monitoring

Wiederkehrende Testfaelle fuer Suchqualitaet nach jedem Release pruefen

9. Grenzen von BM25 in der Praxis

BM25 ist ein rein statistisches, lexikalisches Scoring-Modell: es kennt keine Bedeutung, keine Synonyme, kein semantisches Verstaendnis. Ein Dokument, das ein exaktes Synonym des Suchbegriffs enthaelt, aber nicht den Begriff selbst, bekommt ohne zusaetzliche Synonym-Konfiguration keinen Score-Beitrag fuer diesen Begriff. Diese Grenze wird in modernen Suchsystemen oft durch zusaetzliche Synonym-Filter im Analyzer oder durch ergaenzende Vektorsuche mit Embeddings ausgeglichen, die semantische Aehnlichkeit unabhaengig von exakter Wortwahl erfassen kann.

Eine zweite praktische Grenze betrifft Geschaeftslogik: BM25 optimiert ausschliesslich fuer textuelle Relevanz, nicht fuer Geschaeftsziele wie Marge, Lagerbestand oder Popularitaet. Diese Signale muessen ueber zusaetzliche Mechanismen wie die Function Score Query eingebracht werden, die den reinen BM25-Score mit weiteren Faktoren kombiniert. BM25 bleibt dabei die solide textuelle Basis, auf der diese Boosting-Mechanismen aufsetzen, aber es ersetzt keine vollstaendige Relevanz-Strategie.

Eine dritte Grenze zeigt sich bei sehr kurzen Suchanfragen mit nur einem einzigen Begriff: hier hat die Feldlaengen-Normalisierung einen unverhaeltnismaessig grossen Einfluss, weil bereits ein einziger zusaetzlicher Treffer den relativen Anteil des Suchbegriffs im Feld stark veraendert. In solchen Faellen lohnt es sich, den b-Parameter gezielt zu senken oder die Ergebnisse mit einer Function Score Query zu stabilisieren, damit einzelne kurze Felder nicht unverhaeltnismaessig bevorzugt werden. BM25 bleibt trotz dieser Grenzen der solideste verfuegbare Standardalgorithmus fuer textuelle Relevanz und wird in der Praxis selten vollstaendig ersetzt, sondern meist gezielt ergaenzt.

10. Zusammenfassung

Der BM25-Algorithmus berechnet den Relevanz-Score in Elasticsearch aus drei Bestandteilen: der Termhaeufigkeit, die mit steigender Wiederholung saettigt, der inversen Dokumenthaeufigkeit, die seltene Begriffe hoeher gewichtet, und der Feldlaengen-Normalisierung, die kurze Felder gegenueber langen fair bewertet. Diese drei Faktoren werden pro Term berechnet und ueber alle Terme der Suchanfrage summiert, gesteuert durch die konfigurierbaren Parameter k1 und b.

Im Vergleich zum aelteren TF-IDF-Modell bietet BM25 kontrollierbarere Saettigung und explizite Feldlaengen-Normalisierung, was es robuster gegenueber Keyword-Stuffing und heterogenen Feldlaengen macht. Die Explain-API bleibt das zentrale Werkzeug, um bei Relevanzproblemen nachzuvollziehen, welcher der drei BM25-Bestandteile fuer einen bestimmten Score verantwortlich ist, bevor man an den Parametern dreht oder zusaetzliche Boosting-Mechanismen einfuehrt.

BM25 wirklich verstehen, das Wichtigste auf einen Blick

Termhaeufigkeit

Wie oft ein Begriff im Dokument vorkommt, saettigt mit steigender Wiederholung, gesteuert durch k1.

Inverse Dokumenthaeufigkeit

Seltene Begriffe im Gesamtindex bekommen mehr Gewicht als haeufige Begriffe.

Feldlaengen-Normalisierung

Gleicht kurze gegen lange Felder aus, gesteuert durch den Parameter b, Standardwert 0.75.

Explain-API

Zeigt die Aufschluesselung des Scores pro Term, unverzichtbar fuer Relevanz-Debugging.

11. FAQ: BM25 Relevance Scoring

1Was bedeutet BM25?
Best Matching 25, der Standard-Relevanz-Algorithmus von Elasticsearch und OpenSearch.
2Was ist Termhaeufigkeit bei BM25?
Wie oft ein Begriff vorkommt, saettigt mit steigender Wiederholung, gesteuert durch k1.
3Was ist inverse Dokumenthaeufigkeit?
Misst Seltenheit eines Begriffs im Gesamtindex, seltene Begriffe bekommen mehr Gewicht.
4Warum ranken kurze Felder oft hoeher?
Wegen Feldlaengen-Normalisierung, relative Dichte des Begriffs ist in kurzen Feldern hoeher.
5Unterschied BM25 zu klassischem TF-IDF?
Explizite, konfigurierbare Saettigung und Laengennormalisierung statt implizit und starr.
6Was macht Parameter k1?
Steuert, wie schnell die Termhaeufigkeit saettigt. Standardwert 1.2.
7Was macht Parameter b?
Steuert die Staerke der Feldlaengen-Normalisierung. Standardwert 0.75.
8Wie kann ich den Score nachvollziehen?
Mit explain: true oder dem _explain-Endpunkt fuer die Aufschluesselung pro Term.
9Erkennt BM25 Synonyme?
Nein, rein lexikalisch. Synonyme brauchen Analyzer-Filter oder Vektorsuche.
10Ist BM25 in OpenSearch identisch?
Ja, identische Formel und identische Standardparameter als Default-Similarity.