Typo3 Suche beschleunigen

Bei Typo3-Installationen mit mehr als 1000 Seiten wird die in Typo3 integrierte Suche sehr langsam. Das muss nicht zwangsl├Ąufig so sein.

In Typo3 bietet die System-Extension "Indexed Search (indexed_search)" eine Wortindex-basierte Suche. Der Index wird von einem Crawler-Dienst, der interne Dokumente des CMS aber auch verlinkte, externe Ressourcen ber├╝cksichtigen kann, in der unterliegenden SQL Datenbank aufgebaut. Zur Abfrage des Index wird um standardkonformes SQL verwendet.

Nun hat die Indexed Search-Extension bei gr├Â├čeren Seiten mit mehreren tausend Seiten Performanceprobleme. Darauf weist die Dokumentation sogar in den Known-Problems hin. Die Probleme liegen einerseits an (unn├Âtig) komplizieren SQL-Abfragen. Andereseits erzeugt der Crawler sehr viele Daten, die die Datenbank-Tabellen (z.B. index_rel), etc schnell auf mehr als 1 Million Zeilen anwachsen l├Ąsst. Es lohnt sich dennoch nach pragmatischen L├Âsungen zu Suchen, da Alternativen wie externe Suchserver oder ein datenbankbasierter Volltextindex mehr Konfigurationsaufwand ben├Âtigen, oder in einer gegebenen Hosting-Umgebung nicht betrieben werden k├Ânnen.

Diese Komplexit├Ąt der Index-Datenbank-Abfragen l├Ąsst sich sehr effektiv reduzieren, indem man Typo3 anweist nicht mehr nach Wortteilen (Volltext) zu suchen. Standardm├Ą├čig wird n├Ąmlich der LIKE-Operator zum Vergleich zwischen Suchbegriff und Index-Wort verwendet. Diese ├änderung bedeutet nat├╝rlich eine Einschr├Ąnkung, da nur noch eindeutige ├ťbereinstimmungen mit dem Suchbegriff gefunden werden. Das ist in der Praxis jedoch meistens zu verschmerzen. Hierzu muss in der TypoScript-Konfiguration des indexed_search-Plugins folgende Einstellung vorgenommen werden:

plugin.tx_indexedsearch._DEFAULT_PI_VARS.type = 0

Der zweite Ansatzpunkt ist der Umfang des Suchindexes, d.h. welche Worte werden ├╝berhaupt vom Crawler ber├╝cksichtigt. In der Tabelle index_words werden alle vom Crawler gefundenen W├Ârter aufgez├Ąhlt. In diese Tabelle gibt es eine Spalte is_stopword. Stopwords sind W├Ârter, die vor der maschinellen Verarbeitung von nat├╝rlichsprachlichem Text herausgefiltert werden. Diese Worte bieten f├╝r eine Suchmaschine keinerlei Verbesserung der Ergebnis-Qualit├Ąt und k├Ânnen getrost vernachl├Ąssigt werden. F├╝r eine Seite mit deutschem Inhalt setzt folgender SQL-Befehl das Stopword-Bit f├╝r irrelevante Begriffe:

update index_words as i set i.is_stopword = 1
where i.baseword in (
'aber','alle','allem','allen','aller','alles','als','also','am','an','ander','andere','anderem',
'anderen','anderer','anderes','anderm','andern','anderr','anders','auch','auf','aus',
'bei','bin','bis','bist','da','damit','dann','der','den','des','dem','die','das','da├č','derselbe',
'derselben','denselben','desselben','demselben','dieselbe','dieselben','dasselbe',
'dazu','dein','deine','deinem','deinen','deiner','deines','denn','derer','dessen','dich',
'dir','du','dies','diese','diesem','diesen','dieser','dieses','doch','dort','durch','ein',
'eine','einem','einen','einer','eines','einig','einige','einigem','einigen','einiger',
'einiges','einmal','er','ihn','ihm','es','etwas','euer','eure','eurem','euren','eurer',
'eures','f├╝r','gegen','gewesen','hab','habe','haben','hat','hatte','hatten','hier',
'hin','hinter','ich','mich','mir','ihr','ihre','ihrem','ihren','ihrer','ihres','euch',
'im','in','indem','ins','ist','jede','jedem','jeden','jeder','jedes','jene','jenem',
'jenen','jener','jenes','jetzt','kann','kein','keine','keinem','keinen','keiner',
'keines','k├Ânnen','k├Ânnte','machen','man','manche','manchem','manchen',
'mancher','manches','mein','meine','meinem','meinen','meiner','meines',
'mit','muss','musste','nach','nicht','nichts','noch','nun','nur','ob','oder','ohne',
'sehr','sein','seine','seinem','seinen','seiner','seines','selbst','sich','sie','ihnen',
'sind','so','solche','solchem','solchen','solcher','solches','soll','sollte','sondern',
'sonst','├╝ber','um','und','uns','unse','unsem','unsen','unser','unses','unter','viel',
'vom','von','vor','w├Ąhrend','war','waren','warst','was','weg','weil','weiter','welche',
'welchem','welchen','welcher','welches','wenn','werde','werden','wie','wieder','will',
'wir','wird','wirst','wo','wollen','wollte','w├╝rde','w├╝rden','zu','zum','zur','zwar',
'zwischen');

Die Einstellungen zu den Stopwords k├Ânnen auch ├╝ber das Typo3-Backend vorgenommen werden. Einfach im Web ⇒ Info-Men├╝ den Modus Indexed Search per Drop-Down-Box w├Ąhlen. Anschlie├čend ├Âffnet sich eine ├ťbersicht aller indizierten Unterseiten. Hier klickt man nun auf den Title der Seite. Anschlie├čend wird eine ├ťbersicht aller Such-W├Ârter, die mit der jeweiligen Seite verkn├╝pft sind, gezeigt. ├ťber den Button Change stop-word settings k├Ânnen einzelne W├Ârter von Hand als Stopword markiert werden.

2010-04-11_142620

Die Suche auf Ihrer Typo3-Seite sollte nun merklich schneller funktionieren. Falls Sie noch Fragen haben, oder Hilfe bei der Konfiguration Ihrer Typo3-Suche ben├Âtigen, kontaktieren Sie mich doch einfach unverbindlich unter joachim.rosskopf@lx-networking.de.