TYPO3 Extension Faceted Search Installation und Konfiguration

Die TYPO3 Extension Faceted Search ist seit Jahren auf mehreren Webseiten der Agentur IBK im Einsatz. Diese Suche bietet folgende Vorteile: 

  • Im Gegensatz zur Indexed Search als Standard im TYPO3 Core lassen sich die Inhalte, in denen gesucht werden soll, direkt aus der Datenbank auslesen und es muss nicht die gesamte Webseite gecrawlt werden 
  • Im Gegensatz zur SOLR Search muss kein eigener Server für die Indexierung mit Linux aufwändig aufgebaut werden 

Die Facettierte Suche lässt sich einfach als Extension herunterladen und installieren. Mit Hilfe von recht wenigen Einstellungen lassen sich auch größere Webseiten innerhalb weniger Sekunden absuchen und ihre Inhalte für die Suche bereitstellen. Die Ergebnisse selber kann man nach Schlagworten ordnen, daher der Begriff der Facettierten Suche. Im Folgenden beschreiben wir Ihnen Besonderheiten der Suche: Die Einrichtung eigener Ansichten und die Erweiterung der Suche auf Inhalte, die nicht aus dem Backend von TYPO3 kommen, in unserem Beispiel die Anbindung unserer Blog Extension an die Suche. 

Installation und Einrichtung Extension KE Search

Die Installation und Einrichtung der TYPO3 Extension Faceted Search ist recht ausgiebig in der Dokumentation der Erweiterung beschrieben:

Dokumentation KE Search

Frontend für Suchmaske und Ergebnisliste der Facettierten Suche

Eine der wundervollen Sachen bei TYPO3 ist, dass man eine Extension installieren und Monate, wenn nicht Jahre an Arbeit sparen kann, um ein Projekt umzusetzen. Die Anpassung des Frontends auf der Webseite geschieht mit Hilfe von Fluid Templates, die man nicht in der Extension bearbeitet, sondern auf der eigenen Webseite entweder in der eigenen Provider Extension (empfehlenswert!) oder im fileadmin. 

TypoScript Setup für eigene Templates und Partials

In jedem Fall gibt man seinem TYPO3 System an, dass es HTML Vorlagen in einem von uns festgelegten Verzeichnis suchen soll. Diese haben einen höheren Stellenwert in der Hierarchie, den wir mit dem folgenden TypoScript Source Code festlegen:

 plugin.tx_kesearch_pi1 {
  templateRootPath = EXT:extension/Resources/Private/Ke/Templates/
  templateRootPaths {
    10 = EXT:extension/Resources/Private/Ke/Templates/
    }
}

 plugin.tx_kesearch_pi2 {
  view {
    partialRootPaths {
      10 = EXT:extension/Resources/Private/Ke/Partials/
    }
  }
}

Beachten Sie hierbei die beiden Interfaces pi1 und pi2 sowie die Tatsache, dass bei der Darstellung der Suchergebnisse die view angesprochen wird, im ersten Fall jedoch nicht. 

In den oben als Beispiel genannten Verzeichnissen können Sie nun die Dateien als Kopie ablegen, die Sie bearbeiten möchten. Bei der Facettierten Suche reicht bei den Templates im Allgemeinen die SearchForm.html, den Partials die ResultRow.html

Eigener Indexer für die Facettierte Suche

Kommen wir nun zu einer Anwendung, die wir auf der TYPO3 Webseite der Agentur IBK finden. Folgendes Problem bestand: Der von Thomas Berscheid im Konzept einer Extension programmierte Blog der Agentur hatte fast 100 Beiträge, die nach mehreren Schritten zur SEO bei Google zu wichtigen Themen in der Suche angezeigt werden. Diese Beiträge sollten auch in der Suche auf der Webseite angezeigt werden können. Der Blog hatte zwar aus einer früheren Arbeitsversion der Extension eine eigene Suchfunktion, aber es wäre natürlich komfortabler für Besucher der Webseite, wenn sie alle Ergebnisse in einem Modul zur Verfügung hätten. Also haben wir als Vorbild für das Schreiben eines eigenen Indexers für die Facettierte Suche die Beispiel Extension heruntergeladen: 

Beispiel Extension für Hooks in der Faceted Search

Auf Basis dieser Extension haben wir eine eigene Extension entwickelt und in unsere TYPO3 Webseite eingebunden. Die einzelnen Schritte dazu schildern wir Ihnen hier. 

Controller des Indexers für eigene Extension

Sehen wir uns einmal die Funktionsweise der Faceted Search und des Indexers an. Wenn man eine Webseite fertig hat, die Facettierte Suche gerade neu eingebunden hat oder den Suchindex aktualisieren möchte, dann stößt man den Prozess der Indexierung an. Der Indexer der Faceted Search durchsucht dabei die Inhalte der TYPO3 Datenbank, also in erster Linie Überschriften und den Bodytext sowie die Zusammenfassung und weitere Inhalte zur Sprache, Datum etc. aus dem Projekt. Diese Inhalte werden dann in eine eigene Tabelle der Extension geschrieben, in der die Suche erfolgt. 

Ein eigener Indexer für die Facettierte Suche hat nun also die Aufgabe, eine neue Quelle zu durchsuchen und die Inhalte für 

  • Überschrift 
  • Inhalt 
  • Kurzfassung 

auszulesen, um sie dann in die Tabelle der Suche zu schreiben. Um dies zu ermöglichen, haben wir den Controller der Extension Faceted Search Hooks Example umgeschrieben und unsere eigenen Daten angeschlossen. Kern des Auslesens ist dabei die Funktion customIndexer. Dieser Funktion haben unsere Tabelle angegeben, in der die Inhalte unseres Blog stehen: 

 if ($indexerConfig['type'] == BlogIndexer::KEY) {
  $table = 'tx_ibkblog_domain_model_blog'; 
  [...weiterer Source Code...] 
}

Zusätzlich setzt man als Konstante KEY ebenfalls den Namen der Tabelle, in der gesucht werden soll. 

Für die Suche bauen wir nun das SQL Statement für den Doctrine Datenbanktreiber auf: 

 $statement = $queryBuilder 
  ->select('*')
  ->from($table)
  ->execute();

Auf die where-Clause haben wir verzichtet, da es in dieser Extension keine weitere Abfrage zu aktiven und inaktiven Inhalten gibt. 

Nun durchläuft man die Abfrage über alle Datensätze und ordnet die abgefragten Felder, in diesem Fall ohne Einschränkung, den definierten Feldern der Indexer Tabelle zu: 

 while ($record = $statement->fetch()) {
  $title = strip_tags($record['blogtitel']);
  $abstract = strip_tags($record['blogkurzfassung']);
  $content = strip_tags($record['bloginhalt']);

Je nachdem ob Sie für den Indexer eine eigene Extension erstellen oder die vorhandene Beispiel Erweiterung nutzen, müssen Sie die Datei composer.json im Stammverzeichnis der Extension anpassen, damit Sie über die Admin Tools im TYPO3 Backend oder den Composer einen Autoload für die Klassen Ihrer eingebundenen Extensions machen können. Ein Codebeispiel sieht so aus: 

 "name": "ext/extsearch",
"autoload": {
  "psr-4": {
    "Ext\\Extsearch\\": "Classes"
  }
},

Nun können Sie die Extension in Ihre TYPO3 Webseite laden und nutzen. Eine Anbindung im Basis Template ist nicht notwendig. Die Konfiguration von Suche und Indexierung ist hier beschrieben: 

Dokumentation Suche und Indexierung Feceted Search

Table Control Array (TCA) anpassen

Das Table Control Array müssen Sie ebenfalls anpassen: 

Configuration -> TCA -> tx_kesearch_indexerconfig.php

 $GLOBALS['TCA']['tx_kesearch_indexerconfig']['columns']['sysfolder']['displayCond']
  .= ',' . \key\Extsearch\BlogIndexer::KEY;

Lokale Konfiguration anpassen

In der Datei ext_localconf.php im Stammverzeichnis Ihrer Extension müssen Sie ggf. die Pfade zu Ihrem Controller anpassen: 

 $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ke_search']['registerIndexerConfiguration'][] = 
  \ext\ext search\BlogIndexer::class;
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ke_search']['customIndexer'][] =
    \ext\ext search\BlogIndexer::class;

Nach dieser Syntax sind auch die weiteren globalen Variablen der Seite anzupassen. Ein Beispiel für den Source Code dazu finden Sie im Wiki unserer Agentur, das wir unten verlinkt haben.