Der Inverted Index – die genialste Datenstruktur des Web 📚
Warum funktioniert Suche in 400 Milliarden Seiten schneller als das Finden einer Datei auf deinem Laptop? Wegen dieser Idee. In dieser Page bauen wir Schritt für Schritt einen echten Inverted Index – inkl. Tokenization, Stemming, Posting Lists, Skip Pointers und Index-Kompression.
▶Live ausprobieren
Tippe ein Wort. Sieh wie die Suchmaschine in einem Schritt findet, in welchen Dokumenten es vorkommt.
01Forward vs Inverted Index – der Unterschied
Beide Datenstrukturen verbinden Dokumente mit Wörtern. Aber in genau umgekehrter Richtung.
📄 Forward Index
Dokument → Wörter darin
Schwäche: Suchst du „motor", musst du alle Docs durchgehen, um zu sehen, wer's enthält. Bei 400 Mrd Docs nicht machbar.
🔁 Inverted Index
Wort → Dokumente, die's enthalten
Stärke: „motor" suchen = ein Schlag im Index. Sofort: „Doc 3". O(1) statt O(n).
02Tokenization – Text in Wörter zerlegen
Klingt einfach. Ist es nicht.
Beispiel-Satz: "Lunolabs baut den XLeRobot, einen 3D-gedruckten Roboter."
Naive Tokenization (Split bei Whitespace):
Probleme:
- Komma und Punkt kleben an Wörtern:
XLeRobot,ist nicht das gleiche wieXLeRobot - Bindestriche: ist
3D-gedrucktenein Wort oder zwei? - Apostrophe: „l'amour" → eins oder zwei Tokens?
- Asiatische Sprachen: Chinesisch hat keine Leerzeichen zwischen Wörtern
- Emojis: 🚀 ist ein Zeichen, aber als Suchterm relevant
Gute Tokenizer machen das richtig:
03Normalization – alles vergleichbar machen
"Roboter", "ROBOTER", "Robotern", "robóter" sollen alle den gleichen Index-Eintrag finden.
Schritt 1: Lowercasing
„Roboter" → roboter. Trivial, aber wichtig.
Schritt 2: Stopword-Removal
Wörter wie der, die, das, und, ist, in tragen kaum Bedeutung. Sie raus.
Schritt 3: Stemming / Lemmatization
Wortvarianten auf einen gemeinsamen Stamm reduzieren. Zwei Ansätze:
| Methode | Beispiel | Bemerkung |
|---|---|---|
| Stemming (regelbasiert) | laufen, läuft, lief → lauf | Schnell, kann „falsche" Stämme erzeugen (z.B. „better" → „bett") |
| Lemmatization (wörterbuchbasiert) | laufen, läuft, lief → laufen | Schöner, aber langsamer und sprachabhängig |
04Posting Lists – die Daten hinter dem Wort
Pro Wort speichert der Index nicht nur „in welchen Docs", sondern auch wo und wie oft.
Eine Posting List ist die Liste aller Vorkommen eines Wortes:
Was jeder Eintrag speichert:
- doc ID – welches Dokument
- tf (term frequency) – wie oft im Dokument
- positions – wo im Dokument (wichtig für Phrase Queries wie „echte Roboter")
Skip Pointers – schneller durch die Liste
Wenn zwei Wörter zusammen gesucht werden („roboter AND motor"), muss die Suche die Schnittmenge beider Posting Lists finden. Mit Skip Pointers (alle ~√n Einträge) springst du große Stücke.
05Index-Kompression – Milliarden Einträge auf TB
Naiv gespeichert wäre ein Web-Index Petabytes. Mit cleveren Tricks: Terabytes.
Variable Byte Encoding
Doc-IDs sind oft klein, aber 32-bit integers verschwenden Platz. Variable Byte: ein Wert braucht 1, 2, 3 oder 4 Bytes – je nach Grösse. Bit 7 = „mehr kommt".
Delta Encoding (Gaps)
Statt absoluter Doc-IDs nur die Differenzen speichern. Aus [1042, 1057, 1089, 1098] wird [1042, 15, 32, 9] – viel kleinere Zahlen, viel komprimierbarer.
Front Coding für Wörter
Im Wörterbuch (Term-Dict) stehen die Wörter sortiert. Aufeinanderfolgende Wörter teilen oft Präfixe: "robot", "roboter", "roboterhaft", "robotik". Speichere nur die Differenz zum Vorgänger.
06Mini-Inverted-Index in Python
~30 Zeilen Code für einen funktionierenden (Mini-) Suchindex.
🎯Key Takeaways
- Der Inverted Index dreht die Frage um: nicht „welche Wörter im Dokument", sondern „welche Dokumente fürs Wort".
- Tokenization ist die Kunst, Text in saubere Wörter zu zerlegen – mit allen Edge Cases.
- Normalization (Lowercasing, Stopwords, Stemming) macht Wörter vergleichbar.
- Posting Lists enthalten pro Wort: Doc-ID, Frequency, Positionen.
- Skip Pointers beschleunigen AND/OR-Queries über mehrere Listen.
- Index-Kompression (VByte, Delta-Encoding, Front-Coding) → ~25% der Roh-Grösse.
- In ~30 Zeilen Python hast du einen funktionierenden Mini-Inverted-Index.