Schneller finden dank Volltext-Index: Indexed Search wird aufgebohrt
Die Such-Extension „Indexed Search“ [1] ist schon sehr lange ein fester Bestandteil von TYPO3 – und zusammen mit TYPO3 ist auch die hauseigene Suchmaschine immer mehr gewachsen. Die Erweiterung bietet heute zahlreiche Funktionen, die über eine einfache Suchabfrage weit hinausgehen. Außerdem lässt sie sich nahtlos in nahezu jedes Design integrieren. Nicht zuletzt deshalb gehört Indexed Search zum Standardumfang fast jeder TYPO3-Website.
Inhaltsverzeichnis
Anstatt jede einzelne Seite bei jeder Abfrage separat zu durchsuchen, pflegt „Indexed Search“ einen Index, eine Art Inhaltsverzeichnis. Damit lassen sich Suchbegriffe sehr viel schneller finden. Dieses Prinzip nutzen alle modernen Suchmaschinen – man stelle sich nur einmal vor, Google würde bei jeder Suchanfrage das ganze Internet „mal eben“ durchsuchen. Der große Nachteil eines Indexes ist, dass er niemals vollständig aktuell ist, sondern immer nur den Datenbestand der letzten Indexierung kennt. Darum erscheinen insbesondere Pressemeldungen oft erst mit großer Verzögerung in den Suchresultaten.
Durch die nahtlose Integration in TYPO3 besteht dieser Nachteil bei Indexed Search nicht, denn TYPO3 benachrichtigt den Indexer automatisch, sobald eine Inhaltsseite verändert wurde und erstmals wieder aufgerufen wird.
TYPO3 enthält übrigens auch heute noch ein optionales Such-Plugin, das keine Indexierung verwendet und damit vor allem im Hinblick auf die Performance massive Nachteile mit sich bringt. Aber nicht nur darum ist Indexed Search bei TYPO3-Websites die erste Wahl.
Viele Vorzüge
Die Suche auf Basis von „Indexed Search“ bietet zahlreiche interessante Funktionen:
- Durchsuchen von Seiteninhalten mit unterschiedlicher Gewichtung der verschiedenen HTML-Dokumentendaten (Titel, Metatags, Inhalt)
- Durchsuchen von Dokumenten verschiedenster Produkte (z. B. Microsoft Office, OpenOffice.org, Adobe PDF)
- Berücksichtigen von zugriffgeschützten Seitenbereichen
- Erkennen ähnlich klingender Suchbegriffe
- Optionales Indexieren von Inhalten auf fremden Webservern
Einzige Schwachstelle
Das große Manko bei „Indexed Search“ war aber schon seit jeher – trotz gut durchdachtem Indexkonzept – die Geschwindigkeit. Wenn eine Suchanfrage zehn Sekunden oder sogar länger dauert, dann ist das definitiv zu viel für den interessierten Besucher.
Hauptgrund für dieses Problem ist die Tatsache, dass bei jeder Suchabfrage mehrere Datenbanktabellen miteinander verknüpft werden und dabei jeweils temporäre Daten von riesiger Größe entstehen. Bei jeder Suchabfrage müssen diese Daten vollständig eingelesen, verarbeitet und gespeichert werden. Erfolgt während dieser Zeit eine zweite Suchabfrage, so müssen entsprechend doppelt soviele Daten verarbeitet werden, was die Suche entsprechend verlangsamt.
Je länger die Suche in Anspruch nimmt, desto größer ist die Chance, dass in der Zeit auch noch eine dritte Suchabfrage gestartet wird. Dieser Teufelskreis geht immer so weiter und wirkt sich rasch auch auf andere Besucher aus, die von der Suchfunktion gar keinen Gebrauch machen.
Tuning per TypoScript
Es gibt viele Möglichkeiten, um die Suchgeschwindigkeit zu verbessern. Dabei werden oft mit sehr wenig Aufwand sehr gute Verbesserungen erzielt:
- Suchen nur nach ganzen Wörtern statt Teilwörtern: findet beispielsweise „Geburt“, aber nicht „Geburtstag“
- Ignorieren von vererbten Zugriffsberechtigungen: findet Inhalte auf zugriffgeschützter Seite A, aber nicht auf deren Unterseite B
- Deaktiveren der exakten Ergebniszählung: Diese Einstellung ist standardmäßig bereits aktiv. Führt bei der Zählung der gesamten Ergebnisse keine vollständige Prüfung von doppelten und überflüssigen Einträgen durch. Dadurch kann die Anzeige der Anzahl an Suchergebnissen auf jeder Ergebnisseite variieren.
Das folgende Listing fasst die benötigten TypoScript-Anpassungen zusammen:
plugin.tx_indexedsearch { # Suche standardmäßig nur ganze Wörter _DEFAULT_PI_VARS.type = 0 # Ignoriere vererbte Seiteneigenschaften (Zugriff, etc.) search.skipExtendToSubpagesChecking = 1 # Deaktiviere exakte Ergebniszählung search.exactCount = 0 }
Listing 1
Das Ergebnis ist je nachdem mehr oder weniger zufriedenstellend, denn all diese Anpassungen sind mit Kompromissen verbunden: Entweder es werden nur noch ganze Wörter gefunden oder Seiten aus dem geschützten Bereich werden nicht mehr berücksichtigt.
Fulltext Index
Darum bietet sich eine weitere sehr effiziente Anpassung an, die sich dadurch auszeichnet, dass sie eine bisher ungenutzte Funktion des MySQL-Datenbanksystems nutzt: Volltext-Indexe [2]. Volltext-Indexe sind MySQL-interne Indextabellen, die speziell für die Indexierung von großen Textfeldern ausgelegt sind. Dadurch wird TYPO3 ein großer Teil der Suchabfrage abgenommen und durch MySQL-interne Bordmittel [3]
[4] ersetzt. Durch den entstandenen Geschwindigkeitsgewinn dauert die Suche je nach Umfang der Website nur noch circa die Hälfte der ursprünglichen Zeit.
Der Nachteil der neuen Suchvariante besteht vor allem in der nicht vorhandenen Plattformkompatibilität. Volltext-Indexe sind eine MySQL-spezifische Eigenschaft und daher nicht DBAL-Kompatibel. DBAL (Datenbank-Abstraktions-Layer) ermöglicht den Betrieb von TYPO3 auf Datenbanksystemen jenseits von MySQL, etwa Oracle oder PostgreSQL. Aus diesem Grund wurde die Fulltext-Implementierung in TYPO3 von Beginn an als separate Extension realisiert, die sich über sogenannte Hooks in die herkömmliche Suchroutine integriert, ohne dabei die Funktionalität für alternative Datenbanksysteme zu beeinflussen.
„Indexed Search“ mit Unterstützung für Volltext-Indexe befindet sich zur Zeit noch in der Testphase. Es ist geplant, dass die Erweiterung in TYPO3 4.3 hinzugefügt wird.
Noch schneller dank Caching
Die TYPO3-Kernentwickler haben mit Hilfe eines Profilers (Programmierwerkzeug zur Analyse von Software) eine weitere Möglichkeit zur Geschwindigkeitsverbesserung gefunden. Dabei wurde erkannt, dass bei jedem Suchvorgang immer wieder der vollständige Seitenbaum geladen wird. Mit Hilfe des so genannten Treelist-Cache wird ab TYPO3 4.3 diese immer wiederkehrende Aufgabe beschleunigt und bringt so einen zusätzlichen Geschwindkeitsvorsprung.
Alternativen
Einen vollständig anderen Lösungsansatz nutzt die TYPO3-Extension „mnoGoSearch“ [5]. Sie ersetzt „Indexed Search“ vollständig und integriert stattdessen die gleichnamige Suchsoftware aus Russland. Der Vorteil von mnoGoSearch ist die hohe Geschwindigkeit, der Installationsaufwand in TYPO3 ist dabei ungefähr gleich groß wie bei „Indexed Search“. Der große Nachteil von mnoGoSearch ist aber, dass es keine zugriffgeschützten Bereiche indexieren kann. Dies ist insbesondere bei Intranet- und Extranet-Anwendungen eine wichtige Voraussetzung.
Ausblick
Wie bereits erwähnt wird TYPO3 4.3 zwei wesentliche Verbesserungen für „Indexed Search“ mitbringen: Treelist-Cache und Volltext-Indexe. Beide Verbesserungen befinden sich zur Zeit noch in der fortgeschrittenen Testphase. Der aktuelle Stand der Entwicklung ist auf der Heft-CD zu finden.