Typo3 : Site Crawler Installation, Anleitung zur Installation und Konfiguration
Typo3 bietet eine integrierte Suche namens Indexed Search an, welche sehr umfangreich und effektiv arbeitet. Standardmäßig wird jede Seite beim erstmaligen Aufruf indiziert und somit in den Index der Suche aufgenommen. Der Nachteil wie bei vielen anderen Mechanismen in Typo3 ist die Tatsache, dass nicht mehr benötigte Daten aufbewahrt und nicht automatisch gelöscht werden. Somit bläht sich die mit der Zeit die Typo3-Datenbank unnötig auf, so dass die Suche immer langsamer wird. Dies führt sogar bis zum völligen Ausfall des Webservers, der schlicht überlastet und überfordert ist.
Genauer gesagt handelt es sich hier um die Tabelle index_rel, welche mehrere Gigabyte groß werden kann. Und dann wird auch klar, warum die Suche langsam wird, wenn eine solch riesige Datenmenge durchsucht werden muss.
Abhilfe schafft ein automatischer Job, der die entsprechenden Tabellen leert und sämtliche Seiten wieder in den Suchindex aufnimmt. Somit läuft man nicht in Gefahr, dass die Suche langsam und die Performance des gesamten Webserver leidet. Für diesen Automatismus bietet sich die Extension Site Crawler an.
Obwohl viele Anleitungen im WWW existieren, scheitert die Konfiguration oftmals, so dass an dieser Stelle eine Schritt-für-Schritt Erklärung veröffentlicht wird.
Vorweg sei erwähnt, dass der Site Crawler als Cron Job auf dem Server ausgeführt wird. Da bedeutet, dass ich Zugriff auf den Webserver benötige, um dort das Skript ausführen zu können. Anwender eines Hosting-Angebots müssen mit ihrem Provider in Verbindung treten und nachfragen, ob das Skript mittels Cron Job ausgeführt werden kann. Vereinfacht und in Windows-Sprache formuliert: man richtet im Taskplaner einen Job ein, der regelmäßig ein kleines Skript ausführt.
Teil 1 - Index-Tabellen leeren
Zuerst können die Index-Tabellen geleert werden. Keine Sorge, die Tabellen sind keine Systemtabellen, sondern enthalten nur die gesammelten Informationen über die einzelnen Seiten, die während der Indizierung beim Aufruf gespeichert werden. Nach der Leerung der Tabellen werden diese automatisch wieder gefüllt. Aber: nachdem die Index-Tabellen geleert wurden, gibt es keine Suchtreffer mehr. Klar, denn die entsprechenden Tabellen müssen erst wieder mit Daten gefüllt werden, was später mit dem Site Crawler erfolgt.
Folgende Tabellen können problemlos geleert werden (bsp. mit PHPMyAdmin):
index_fulltext
index_grlist
index_phash
index_rel
index_section
Optional können die folgenden Tabellen ebenfalls geleert werden:
index_words
Ist die Wortliste der gefunden Wörter. Wird nach dem initialen befüllen nur minimal anwachsen.
index_stat_search und index_stat_word
Was hat der Besucher in das Suchfeld eingegeben? Praktisch, um Analysen zum Suchverhalten zu erstellen.
Damit man die Tabellen nicht jedes Mal von Hand, kann mittels Linux-Scripting dieses automatisieren. Dazu legt man bsp. zwei Dateien an: typo3-clear-index.sh (das Skript) und typo3-clear-index.sql (enthält die SQL-Befehle).
# Auszug typo3-clear-index.sh
#! /bin/bash
# Index-Tabellen leeren
mysql --user=XXX --password=XXX --database=XXX --force < typo3-clear-index.sql;
# Auszug typo3-clear-index.sql
TRUNCATE cache_extensions \G
TRUNCATE cache_hash \G
TRUNCATE cache_imagesizes \G
TRUNCATE cache_md5params \G
TRUNCATE cache_pages \G
TRUNCATE cache_pagesection \G
TRUNCATE cache_typo3temp_log \G
TRUNCATE index_fulltext \G
TRUNCATE index_grlist \G
TRUNCATE index_phash \G
TRUNCATE index_rel \G
DELETE FROM index_stat_search WHERE tstamp < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 DAY)) \G
DELETE FROM index_stat_word WHERE tstamp < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 DAY)) \G
TRUNCATE index_section \G
TRUNCATE tx_crawler_queue \G
\q
Teil 2 - Site Crawler installieren und konfigurieren
Nachdem die Extension Site Crawler installiert wurde, sollte man sich die Konfiguration etwas genauer anschauen und optional anpassen. In diesem Fall wurde der Eintrag Entries per run auf 1000 erhöht, damit alle Webseiten (insgesamt 850) auf einmal indiziert werden.
Zuerst muss man einen Backend-Benutzer namens _cli_crawler anlegen, über welchen das Skript auf Typo3 zugreifen kann:
Nun klickt man auf die Root-Seite und legt mittels NEU -> Crawler Configuration eine neue Crawler-Konfiguration an. Wichtig hierbei sind der Name des Datensatzes, da dieser später im Skript angegeben werden muss, die Base URL und wenn man Real-URL einsetzt das Häkchen bei Use real URLs. Auch das Häkchen bei Re-indexing (tx_indexedsearch_reindex) nicht vergessen!
Teil 3 - Skript auf dem Server ausführen
Es gibt zwei Komponenten des Site Crawler Skripts: zum einen wird der Site Crawler Job generiert, sprich welche Seiten indiziert werden sollen. Zum anderen werden diese Seiten dann abgearbeitet.
Beginnen wir mit dem ersten Part. Dazu verbinden wir uns mit dem Webserver und geben folgenden Befehl in die Linux-Bash ein:
/var/www/localhost/htdocs/..PFAD ZUM WEB/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf indexall -o queue
Erläuterung: indexall ist kein Systemparameter, sondern der Name der Site Crawler Konfiguration im Typo3-Backend. Dieser muss identisch sein. Der Parameter -d 99 bewirkt, dass bis zu 99 Ebenen indiziert werden, sprich alle Seiten im Seitenbaum (es sei denn, man hat mehr als 99 Ebenen). Bei Erfolg sollte man nun folgende Ausgabe erhalten:
[...]
[21.10.10 00:04] windows/programme.html
[21.10.10 00:04] windows/programme/7-zip-packprogramm.html
[21.10.10 00:04] windows/programme/antivirus-clamav.html
[21.10.10 00:04] windows/programme/antivir-boot-live-cd.html
[21.10.10 00:04] windows/programme/cpu-z-mainboard-cpu-und-ram-informationen-auslesen.html
[21.10.10 00:05] windows/programme/driveimagexml-festplattenimage.html
[21.10.10 00:05] windows/programme/gpu-z-grafikkarten-details-auslesen.html
[21.10.10 00:05] windows/programme/infrarecorder-brennprogramm.html
[21.10.10 00:05] windows/programme/irfanview-bilderautomatisiert.html
[...]
In Site Crawler Statistiken sieht man nun, dass die Seiten in die Warteschlange (queue) hinzugefügt wurden.
Nachdem die Warteschlange mit den zu indizierenden Seite erstellt wurde, muss die Abarbeitung angestoßen werden. Dies erreicht man mit folgendem Befehl:
/var/www/localhost/htdocs/..PFAD ZUM WEB/typo3/cli_dispatch.phpsh crawler 1 -d 99 -conf indexall
Anschließend kann man sehr schön den Verlauf der Abarbeitung verfolgen:
Teil 4 - Cronjob erstellen
Abschließend erweitern wir unser Skript und automatisieren das Ganze mithilfe eines Cronjobs:
#! /bin/bash
# Index-Tabellen leeren
mysql --user=XXX --password=XXX --database=XXX --force < typo3-clear-index.sql;
/var/www/localhost/htdocs/... PFAD ZUM WEB .../typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf indexall -o queue
/var/www/localhost/htdocs/... PFAD ZUM WEB .../typo3/cli_dispatch.phpsh crawler 1 -d 99 -conf indexall
Die Crawler Konfiguration ist manchmal nicht so richtig "greifbar", weil man nicht sofort über das Typo3-Backend oder auf der Server-Konsole Einblick in den aktuellen Vorgang erhält. Zusätzlich wird daher empfohlen, in folgende Tabellen zu schauen:
- tx_crawler_queue
Hier landen alle Seiten, die mithilfe von "crawler_im 1 -d 99 -conf indexall -o queue" in die Warteschleife hinzugefügt wurden. Hat eine Seite einen Eintrag in der Spalte "process_id_completed", wurde diese erfolgreich indiziert. Die Tabelle tx_crawler_queue lässt sich also beliebig oft leeren, um wieder per Cronjob zu füllen. - tx_crawler_process
Der zweite Befehl "crawler 1 -d 99 -conf indexall" fügt in dieser Tabelle einen neuen Eintrag hinzu. Die Prozess ID wird in tx_crawler_queue verwendet, um einen URL mit einem Index-Job (bzw. process) zu verknüpfen. Ist der Eintrag active auf 0 gesetzt, ist der Job abgeschlossen. - tx_crawler_configuration
Die Konfiguration des Indexierungs-Jobs