Crawler einrichten

Die Extension crawler ist für den Betrieb von indexed_search nicht zwingend erforderlich, aber diese Extension kann Euch eine Menge Arbeit abnehmen. Wie Ihr in meiner Dokumentation zur indexed_search bestimmt schon gelesen habt, wird der Cache einer Seite nur durch den Besuch dieser Seite im Frontend indexiert. Das mag bei kleinen Seiten noch OK sein, aber sobald Ihr mit sehr vielen Seiten und vor allem geschützten Seiten (restricted pages) arbeitet, wird das mit der Indexierung schon eine ganze Ecke schwieriger. Denn dann müsst Ihr jede Seite mit einem User einer jeden Frontend-Benutzergruppe besuchen, damit jeder angemeldete User auch nur diese Suchergebnisse erhält, für die er die passende Berechtigung hat.

Backenduser erstellen

Die Crawlerextension kann den kompletten Seitenbaum durchforsten. Diese Arbeit kann schon mal ein paar Minuten dauern und würde unter normalen Bedingungen die in der php.ini angegebene PHP-Ausführungszeit (max_execution_time) sehr wahrscheinlich überschreiten. Um diesem Problem aus dem Weg zu gehen, bringt der crawler ein paar Programme mit, die direkt auf der Konsole des Servers ausgeführt werden können.

Serveradministratoren müssen sich darum kümmern, dass das PHP-Modul auch als CLI verfügbar ist. Im Normalfall ist dies aber schon installiert.

Damit der Crawler auf alle (auch die geschützten) Seiten zugreifen kann, benötigt dieser einen eingerichteten Backenduser mit dem Namen _cli_crawler. Bitte legt diesen Backenduser an und vergebt ein Passwort. Dieser User muss kein Admin sein und er braucht auch keine Benutzergruppenzuordnung. Vergebt einfach den Namen und ein Passwort: Ende.

Das leidige Thema mit der cli_dispatch.phpsh

TYPO3 bringt von Grund auf eine Datei mit, mit der sich vorkonfigurierte PHP-Programmabschnitte unabhängig von der php.ini ausführen lassen. Diese Datei findet Ihr hier:

typo3/cli_dispatch.phpsh

Alle Programmabschnitte müssen in TYPO3 definiert sein. Ohne Definition lässt sich der gewünschte Programmabschnitt nicht ausführen.

Wie führe ich die cli_dispatch.phpsh aus?

Ausführen lässt sich die Datei nur über die Konsole des Servers. Entweder öffnet Ihr eine Shell/Terminal oder Ihr ruft Euch die Shell über SSH auf. Ohne SSH wird's schwierig und Ihr könnt evtl. noch etwas über das Programm phpshell reißen.

Auf einem Ubuntuserver könnte der Aufruf so aussehen:

sudo -u www-data php5 /var/www/typo3/cli_dispatch.phpsh crawler

Ohne eine angegebene Option wie hier "crawler" erhaltet Ihr eine Fehlermeldung:

The first argument must be a valid key.

Falls Ihr oder Euer angegebene Benutzer keine Berechtigungen hat, das Script auszuführen wird das ebenfalls quittiert:

PHP Warning:  require(/var/www/typo3conf/temp_CACHED_ps4dc7_ext_localconf.php): failed to open stream: Permission denied in /var/www/typo3_src-4.4.4/t3lib/config_default.php on line 584

Ich hab auch schon diese Fehlermeldung erhalten:

PHP Notice:  Undefined index: PWD in /var/www/typo3_src-4.4.4/typo3/cli_dispatch.phpsh on line 93
PHP Fatal error:  Uncaught exception 'Exception' with message 'localconf.php is not found!' in /var/www/typo3_src-4.4.4/t3lib/config_default.php:409
Stack trace:
#0 /var/www/typo3_src-4.4.4/typo3/init.php(206): require()
#1 /var/www/typo3_src-4.4.4/typo3/cli_dispatch.phpsh(116): require('/var/www/typo3_...')
#2 {main}
  thrown in /var/www/typo3_src-4.4.4/t3lib/config_default.php on line 409

Das passiert z.B. wenn man cli_dispatch in dieser Variante aufruft:

sudo -u www-data ./cli_dispatch.phpsh crawler

Deshalb immer den vollständigen Pfad zur cli_dispatch angeben.

Wie finde ich die Namen der Programmabschnitte heraus?

Im Quellcode habe ich eine kleine Lücke dazu gefunden. Gebt einfach als Option irgendeinen Quasch ein, wie z.B.::

sudo -u www-data /var/www/typo3/cli_dispatch.phpsh trallala

Als Ergebnis erhaltet Ihr alle erlaubten Optionen:

The supplied 'cliKey' was not valid. Please use one of the available from this list:

Array
(
    [0] => lowlevel_refindex
    [1] => lowlevel_cleaner
    [2] => lowlevel_admin
    [3] => crawler
    [4] => crawler_im
    [5] => crawler_flush
)

Die ersten drei Einträge gehören zu TYPO3 und nicht zur Crawlerextension. Mit Ihnen kann der Referenzindex neu aufgebnaut werden und/oder das komplette Backend de-/aktiviert werden.

Der crawler [3] macht das Gleiche wie die Besucher: Duch den Aufruf der Seite wird der Index für eben diese erstellt.

Mit crawler_im [4] wird eine Liste von Seiten erstellt (queue), die der crawler besuchen und indexieren soll. Zu Info: Ohne eine durch crawler_im erstellte Liste, wird der crawler [3] nichts indexieren.

crawler_flush löscht die erstellte Liste (queue).

Liste der zu indexierenden Seiten erstellen

In den letzten Jahren wurde viel an der indexed_search rumgeschraubt. So gibt es keine Option "proc" mehr und die ganzen TSconfig-Zeilen müssen auch nicht mehr geschrieben werden. Deshalb hier eine Anleitung mit dem Stand Oktober 2010:

Der Crawler benötigt eine Konfiguration, damit er weiß, was er wo auf welcher Seite tun soll. Dieser Konfigurationsdatensatz wird dann auf der gewünschten Seite hinterlegt. Da wir zu allererst einen Seitenindex generieren müssen, erstellen wir auf unserer obersten Seite einen Datensatz vom Typen crawler configuration. Der Name darf keine Leerzeichen enthalten. Tut Ihr's doch werden diese nach der Speicherung automatisch entfernt. Vergebt den Namen seitenbaum, setzt den Haken bei: Re-indexing [tx_indexedsearch_reindex] und gebt bei baseUrl die URL zu Eurem Projekt an (z.B. meineDomain.com/cms/). Danach speichert Ihr den Datensatz ab. Gebt Ihr die baseUrl NICHT an und versucht die _cli_dispatch.phpsh auszuführen, dann kann es zu folgendem Fehler führen:

tx_indexedsearch_reindex => Error checking Crawler Result: ...

Nur zu Info: Dieser Processing instruction filter ist der Eintrag der damals mit Hilfe der Option -proc angegeben werden musste.

Öffnet nun eine Shell und gebt folgenden Befehl ein:

sudo -u www-data /var/www/typo3/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -o queue -conf seitenbaum

Direkt hinter crawler_im muss die Seiten-UID angegeben werden auf der wir unseren crawler-configuration Datensatz abgelegt haben.

-d bestimmt die Ebenentiefe [0-99]

-o gibt einen Modus an: url = Die URL aller gefundenen Seiten wird in der Konsole ausgegeben. queue = Die URLs aller gefundenen Seiten werden in die Tabelle tx_crawler_queue geschrieben und können später mit dem Parameter crawler indexiert werden. exec = Alle URLs werden nicht nur zwischengespeichert, sondern auch direkt indexiert.

-conf erwartet den Namen unseres crawler-configurations Datensatzes.

Um Euch eine Liste aller Optionen anzeigen zu lassen gebt Ihr nur diese Zeile an:

sudo -u www-data /var/www/typo3/typo3/cli_dispatch.phpsh crawler_im

Mit dieser Zeile stellt Ihr den Seitenbaum zusammen und speichert Ihn in der Datenbank ab:

sudo -u www-data /var/www/typo3/typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -o queue -conf seitenbaum

Danach könnt Ihr selbst entscheiden WANN Ihr die Queue abarbeiten wollt:

sudo -u www-data /var/www/typo3/typo3/cli_dispatch.phpsh crawler

Nach der abgearbeiteten Queue könnt Ihr nun über Info --> Rootseite --> Selectbox: Indexed search --> Overview - 3 Seiten sehr gut erkennen welche Seiten indexiert wurden und welche nicht. Schaut Euch dazu auch das Bild hier oben rechts an. Ihr sehr auch, dass die geschützte Seite nicht indexiert wurde.

Indexierung von geschützten Seiten (restricted pages)

Im letzten Abschnitt habe ich Euch gezeigt, dass der Crawler zwar funktioniert, aber geschützte Seiten werden noch immer nicht indexiert geschweige denn über die Suche auch gefunden.

Geht nochmal in den crawler-configuration Datensatz rein und schiebt die gewünschten Benutzergruppen, mit denen der Crawler die Seiten aufrufen soll, in die Linke Spalte. Nach dem Abspeichern führt Ihr den Crawler nochmal aus:

sudo -u www-data /var/www/typo3/typo3/cli_dispatch.phpsh crawler

Schaut jetzt nochmal in die indexed_search-Übersicht hinein und Ihr werdet feststellen, dass nun auch die geschützten Seiten indexiert wurden.

Ich empfehle nach Änderung der Benutzergruppen im crawler-configurations Datensatz alle index_*-Tabellen in der Datenbank zu leeren (NICHT Löschen!!!). In der indexed_search-Übersicht erscheinen sonst zusätzlich noch die alten Suchergebnisse. Nicht dass es sonst zu unerwünschten Suchergebnissen kommt.

Der Crawler im Backend