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.

Typo3 - die Tabelle index_rel ist riesengroß und sorgt für eine langsame Suche
Typo3 - die Tabelle index_rel ist riesengroß und sorgt für eine langsame Suche
In Typo3 unter dem Punkt Indizierung werden mehrere Millionen Einträge angezeigt.
In Typo3 unter dem Punkt Indizierung werden mehrere Millionen Einträge angezeigt.

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

Nachdem die Index-Tabellen geleert wurden, ...
Nachdem die Index-Tabellen geleert wurden, ...
... ist die Suche erfolglos bzw. ohne Suchtreffer
... ist die Suche erfolglos bzw. ohne Suchtreffer

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:

Benutzer _cli_crawler muss ohne Gruppenzugehörigkeit angelegt werden
Benutzer _cli_crawler muss ohne Gruppenzugehörigkeit angelegt werden

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!

Site Crawler Konfiguration
Site Crawler Konfiguration: kein TSConfig-Code notwendig!

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.

Seiten wurden in die Warteschlange des Site Crawlers hinzugefügt
Seiten wurden in die Warteschlange des Site Crawlers hinzugefügt

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:

Site Crawler: Warteschlange wird abgearbeitet
Site Crawler: Warteschlange wird abgearbeitet
Voller Erfolg: die Tabelle index_rel ist um ein Vielfaches geschrumpft und enthält trotzdem alle Informationen
Voller Erfolg: die Tabelle index_rel ist um ein Vielfaches geschrumpft und enthält trotzdem alle Informationen
Auch die Anzahl der Datensätze ist von über 9 Mio. auf 280.000 geschrumpft
Auch die Anzahl der Datensätze ist von über 9 Mio. auf 280.000 geschrumpft

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

tx_crawler Tabellen