So funktioniert der Contao-Suchindex

Die Suche selbst
In Contao ist die Suche ein Core-Modul, steht also immer zur Verfügung. Sie wird in Einstellungen > Website-Suche aktiviert, als Modul eingebunden und konfiguriert. Hier kann man beispielsweise festlegen, ob ein Wort oder alle Wörter gefunden werden sollen, ob auch Teilbegriffe gefunden werden sollen und auch welcher Kontext mit ausgegeben werden soll. Die Suche ignoriert generell Groß- und Kleinschreibung. Die Contao-Suche funktioniert seitenbasiert. Ich brauche mir also keine Gedanken machen, ob eine Erweiterung „Suche-kompatibel“ ist, denn es wird nur das ausgewertet, was die Seite anzeigt. Wie die Inhalte auf die Seite kommen, spielt dabei keine Rolle.

Es werden also Inhaltselemente ebenso gefunden wie Ausgaben von Modulen. Damit ist die Suche in Contao eigentlich schon vollständig beschrieben. Doch wie funktioniert die Suche und welche Besonderheiten gibt es zu beachten?

Festlegen, was gefunden wird
In Contao gibt es mehrere Möglichkeiten, Texte von der Suche auszuschließen. Ganze Seiten kann man von der Suche ausschließen, indem man unter Seiteneigenschaften in Sucheinstellungen die Checkbox „Nicht durchsuchen“ aktiviert. Leider ist es im Backend nicht möglich, einzelne Artikel oder Inhaltselemente per Backend von der Suche auszuschließen. Dafür benötigt man eigene Templates. Generell leitet man in einem Template einen Bereich, der nicht durchsucht werden soll, mit <!-- indexer::stop --> ein und beendet diesen wieder mit <!-- indexer::continue -->. Der Text dazwischen wird nicht in den Suchindex geschrieben.

Suchergebnisse gekonnt darstellen
Zum einen setzt Contao einen Span mit Klasse „highlight“, die im CSS entsprechend gestaltet werden sollte, um die Wörter hervorzuheben, die die eigentlichen Suchtreffer repräsentieren. Außerdem kann man über die URL des Suchergebnisses weitere Informationen einfließen lassen, wie Autor der Seite, Seitenbild, ... und so die Aussagekraft des Suchergebnisses deutlich verbessern. So lassen sich beispielsweise auch Produktsuchen problemlos realisieren. Die Abbildung zeigt so ein angepasstes Suchergebnis.

Füllen des Suchindex
Dafür gibt es in Contao zwei Wege: bei jedem Aufruf einer Seite wird diese in den Suchindex eingetragen. Surft ein Benutzer über die Seite, füllt sich also nach und nach der Suchindex, bis einmal alle Seiten erfasst sind. Hat sich eine Seite geändert, wird auch der Suchindex aktualisiert. Da ein Redakteur sich üblicherweise die von ihm geänderten Seiten anschaut, ist der Suchindex immer aktuell. So die vereinfachte Theorie. Der andere Weg geht über die Systemwartung. Dort kann man den Suchindex löschen, dann ist dieser wieder leer und enthält keine Daten. Eine Suche in diesem Moment würde keine Daten finden. Man kann in der Systemwartung aber auch den Suchindex neu erstellen lassen. Contao besucht dann quasi alle Seiten einmal selbst, so werden alle passenden Seiten gefunden.

Mehrere Seitenbäume
Einer Seite wird im Suchindex immer einem Seitenbaum für unterschiedliche Domains und Sprachen zugeordnet. Das regelt Contao ganz automatisch: es werden standardmäßig immer nur Suchergebnisse gefunden, die es im aktuellen Seitenbaum gibt. Das ist vernünftig und der Standardfall. Ein abweichendes Verhalten (wie Suche über Sprachen) muss auch abweichend von der Norm programmiert werden.

Geschützte Seiten
In Contao gibt es außerdem die Möglichkeit, Seiten für bestimmte Mitglieder frei zu geben. Auch das berücksichtigt der Suchindex: bei jeder Seite wird im Suchindex abgespeichert, für welche Mitgliedergruppen diese Seite freigegeben ist. Entsprechend tauchen diese Seiten nur dann im Suchergebnis auf, wenn ein Mitglied eingeloggt ist, das einer der berechtigten Benutzergruppen angehört. Das Füllen des Suchindex sollte daher mehrfach erfolgen: einmal ohne eingeloggtes Mitglied. Dabei werden geschützte Seiten mit dem Fehler „403 - Not authorized“ quittiert. Dann sollte das für jede Mitgliedergruppe einmal wiederholt werden.

Zeitsteuerung von Seiten und -elementen
Im Gegensatz zu redaktionellen Änderungen, die der Redakteur meist im Anschluss an die eigentliche Änderung selbst anschaut, werden zeitgesteuerte Änderungen nicht sofort in den Suchindex übertragen. In der Zwischenzeit haben wir also einen Schiefstand: kürzlich per Zeitsteuerung aktivierte Seiten werden erst gefunden, wenn ein Besucher sie im Browser aufgerufen hat (oder der Suchindex über das Backend aktualisiert wird). Schlimmer ist es bei deaktivierten Seiten, denn diese bleiben „für immer“ im Suchindex. Sie werden nur gelöscht, wenn der Suchindex komplett gelöscht wird. Der Benutzer bekommt in der Zwischenzeit also ein Suchergebnis angezeigt, das bei Klick einen Fehler „404 - Nicht gefunden“ produziert. Das sollte nicht passieren. Löschen und Neuanlegen des Suchindex lässt sich auch bequem in einen Cronjob auslegen, der z.B. jede Stunde ausgeführt wird.

Gleiches gilt übrigens auch, wenn Inhalte automatisiert ins System kommen, z.B. durch Import von Artikeln in ein Shopsystem. Auch hier ist der Cronjob die effizienteste Lösung, einfach nach dem Import starten. Ein Cronjob läuft – wenn er nicht als Poorman-Cron läuft – immer ohne eine Domain. In Multidomain-Umgebungen ist es also wichtig, eine Domain als Parameter anzugeben oder den Suchindex für alle Domains zu erzeugen.

Benutzer, Rechte, Konzepte - trilobit

Dieser Beitrag wurde eingereicht von Oliver Reiff, trilobit GmbH, aus Karlsruhe.
Linkeintrag

Zurück