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.