Der erste Schritt ist eine Frage, keine Zeile Code: Was ist ein Treffer? Eine
Seite, ein Produkt, ein Datenblatt, ein Kapitel? Daraus folgt der Zuschnitt eines Dokuments — und
damit alles Weitere. Wir schneiden so, dass ein Treffer eine Antwort ist und nicht der Beginn einer
zweiten Suche.
Danach steht das Mapping: Welches Feld aus dem CMS wird welches Attribut im
Dokument, was ist durchsuchbar, was filterbar, was sortierbar, was nur Anzeige. Diese Liste ist bei
Meilisearch mehr als Dokumentation — Filter und Sortierung funktionieren erst, wenn die zugehörigen
Attribute in den Einstellungen des Index stehen. Und hier fällt die zweite Entscheidung: was den Index
gar nicht erst erreicht. Interne Notizen, Entwürfe, geschützte Bereiche.
In den Index geht, was für die Suche gebraucht wird.
Indexiert wird serverseitig, in zwei Stufen. Zur Einrichtung läuft eine
Voll-Indexierung über den gesamten Bestand, gebündelt statt Dokument für Dokument — Meilisearch nimmt
Dokumente ohnehin als Liste entgegen und arbeitet Aufgaben in einer Warteschlange ab. Danach laufen
nur noch Änderungen: angelegt, geändert, gelöscht. Weil die Verarbeitung asynchron ist, prüfen wir den
Status der Aufgabe, statt anzunehmen, ein Dokument sei in derselben Millisekunde suchbar. Für eine
Redaktion ist das unkritisch, für einen automatisierten Test nicht.
Der Rückweg ist der Praxisstolperstein. Ein Inhalt, der im CMS gelöscht oder
auf Entwurf zurückgesetzt wird, verschwindet nicht von allein aus dem Index — er muss aktiv entfernt
werden. Sonst zeigt die Suche eine Überschrift, die noch niemand sehen sollte, oder verlinkt eine
Seite, die es nicht mehr gibt. Wir behandeln „löschen“ und „depublizieren“ deshalb als eigene
Ereignisse mit eigenem Code. Dasselbe gilt für alles, was hinter einem
Login liegt: Entweder es wird
gar nicht indexiert, oder es landet in einem getrennten Index mit eigenem Zugriffsweg.
Gesucht wird im Frontend — mit einem Schlüssel, der nur lesen darf, und einer
Oberfläche, die wir selbst bauen: Eingabefeld, Treffer während des Tippens, Filter daneben, ein
Zustand für null Treffer. Und wie bei jeder Anbindung planen wir den Fehlerfall mit: Antwortet der
Suchserver nicht, bleibt die Seite bedienbar. Die buchbare Leistung dahinter ist die Komponente
Suche, die Anbindung selbst gehört zur
Schnittstellenentwicklung.