Clever suchen mit TYPO3: Das leistet die SOLR-Extension
Bei Solr handelt es sich um einen Enterprise-Search-Server, basierend auf der Lucene Search Engine. Beides sind in Java entwickelte Projekte der Apache Software Foundation und haben ihre Leistungsfähigkeit mit Referenzen wie eBay, iTunes und Twitter schon längst bewiesen [1].
Wie der Name erahnen lässt, liefert „Apache Solr für TYPO3“ [2] eine Integration von Solr als TYPO3-Extension („solr“ im TYPO3 Extension Repository) [3]. Die Entwicklung der Extension begann als Prototyp bei der dkd Internet Service GmbH im Sommer 2008. Im Frühjahr 2009 begann dann die Umsetzung zur ausgewachsenen Extension mit tiefgehender Integration in das Enterprise Content Management System.
Zu den Prinzipien während der Entwicklung gehörte eine saubere Architektur, verständlicher Code sowie das Ziel einer möglichst einfachen und konsistenten Konfiguration. Darüber hinaus sollen die Redakteure so wenig wie möglich mit der Suche in Kontakt kommen oder auf bestimmte neue Arbeitsweisen achten müssen. Designer müssen sich in der Gestaltung des Interfaces frei entfalten können, ohne durch technologische Gegebenheiten beschränkt zu werden. Zu guter Letzt soll dem Besucher einer Website eine mit modernen Funktionen ausgestatte On-Site-Suche geboten werden, wie er sie etwa von Google kennt.
Neuheiten in Version 2.0
Zu den offensichtlichsten Neuerungen gehört der Installer, der nunmehr die komplette Installation eines Solr-Servers übernimmt. Damit ist es auch ohne jegliche Java-Kenntnisse möglich, einen Solr-Server zu installieren. In der eingesetzten Solr-Version 3.5 hat Apache insbesondere die RAM-Nutzung, Geschwindigkeit und die Query-Syntax verbessert. Außerdem hielten neue Funktionen Einzug in das System, etwa ein neuer Query-Handler, der sowohl Teilwort- und Phrasensuchen als auch boolsche Operatoren ermöglicht.
Während der Installation wird nun standardmäßig eine Multi-Core-Umgebung konfiguriert. Dies erleichtert die Handhabung von mehrsprachigen Webseiten, weil für jede Sprache ein eigener Core mit entsprechenden Algorithmen zur Sprachanalyse verwendet wird. Insgesamt unterstützt Solr nun 36 Sprachen.
Auf TYPO3-Seite unterstützen neue Prüfmethoden und Meldungen im Reports-Modul bei der Fehlersuche. Außerdem wurden die Konfigurationsoptionen der Extension an vielen Stellen vereinheitlicht und logischer gruppiert, um schnell erste Erfolge zu erzielen.
Setzte die letzte öffentliche Version im TYPO3 Extension Repository noch auf die bekannte Frontend-Indexierung, tritt nun die Index-Queue mitsamt Record Monitor und Garbage Collection an deren Stelle.
Über ein neues Modul im TYPO3-Backend können einfache Administrationsaufgaben am Solr-Index ausgeführt werden. Andere Module geben einen Einblick darüber, welche Daten im Index vorhanden sind. An vielen Stellen, an denen man zuvor händisch Daten angeben musste, können diese nun über einfache Menüs ausgewählt werden. Sollten doch einmal Probleme auftreten, helfen erweiterte Logmeldungen, diese zu beheben.
Suchwörter werden nicht nur auf der Ergebnisseite hervorgehoben, sondern auch auf der eigentlichen Zielseite. Ergebnisse können in Gruppen, etwa nach Typ, ausgegeben werden und können über weitere Facetten vom Besucher gefiltert werden. Auch die Indexierung von Mount Pages und Dateianhängen in Datensätzen wie tt_news unterstützt die Extension nun.
All diese Neuerungen brachten diverse Schnitte in der Entwicklung mit sich, die sich auf bestehende Installationen auswirken können. Wer also ein Update plant, sollte vorab einen Blick ins ChangeLog werfen. Als Grundlage wird nun die Long-Term-Support-Version TYPO3 4.5 vorausgesetzt.
Index-Queue: Indexierung 2.0
In Solr 2.0 wurde die bekannte Frontend-Indexierung abgeschafft und komplett durch die Index-Queue ersetzt. Denn die Indexierung der Inhalte über das Frontend hat viele Nachteile. So landen geänderte Inhalte erst im Index, wenn ein Besucher die geänderte Seite aufruft und diese damit neu indexiert. So kann es mitunter, je nach Besucherzahl einer Seite, dauern, bis diese eine geänderte Seite aufgerufen und damit indexiert wird. Bis dahin taucht sie in der Suche nicht auf.
Alternativ ruft der Redakteur die Seite selbst auf oder ein umständlich zu konfigurierender Crawler durchwühlt regelmäßig die Seite. Das größte Manko des Crawlers ist jedoch, dass er nicht weiß, welche Inhalte sich geändert haben oder ob sich überhaupt Inhalte geändert haben. Deswegen muss der Crawler immer die gesamte Seite ablaufen, was ressourcen- und zeitintensiv ist.
Probleme, mit denen die Index-Queue nicht zu kämpfen hat. Bei der Initialisierung indexiert die Queue einmal alle Inhalte. Ein Scheduler-Task arbeitet diese Liste dann Stück für Stück ab. Dabei ist es egal, ob es sich bei einem Eintrag in der Index-Queue um eine Seite, eine Datei, eine News, ein Produkt oder andere Datensätze aus eigenen Extensions handelt.
Arbeitet ein Redakteur nun an Inhalten, werden diese Änderungen vom Record Monitor erkannt und in der Index-Queue zur erneuten Indexierung markiert. So müssen nur die tatsächlich geänderten Inhalte neu indexiert werden und die Änderung wird umgehend von der Suche berücksichtigt. Werden Inhalte durch einen Redakteur gelöscht, versteckt oder durch Änderung der Zugriffsrechte für den Besucher unzugänglich, entfernt das System die entsprechenden Einträge sofort aus dem Index.
Ergebnistypen
Während Indexed Search und andere Such-Extensions nur Seiten kennen, auch wenn auf einer Seite eigentlich ein Produkt dargestellt wird, kann Solr über die Index-Queue auch eine News von einem Produkt oder von einer Seite unterscheiden. Das Ergebnis ist eine differenzierte Darstellung der Suchergebnisse.
Weil Eigenschaften strukturiert erfasst und im Index abgelegt werden können, können diese bei der Ausgabe der Ergebnisse als Filter eingesetzt werden. Filter können entweder vordefiniert oder über Facetten vom Besucher gesteuert werden, um schnell und einfach an die gesuchten Information zu kommen.
Die eigentliche Indexierung via Index-Queue erkennt und indexiert automatisch auch die Übersetzungen bei Seiten. Gleiches gilt für eventuell vorhandene Zugriffsbeschränkungen, sowohl auf Seiten- als auch auf Inhaltselement-Ebene. Diese werden erkannt und als separate Dokumente mit entsprechenden Zugriffsbeschränkungen im Index abgelegt. Sucht ein angemeldeter Besucher im Index, erhält er nur Ergebnisse, für die er entsprechende Rechte besitzt. Die Berücksichtigung von Zugriffsrechten ist insbesondere in Intra- und Extranet-Umgebungen wichtig.
Die Indexierung von Datensätzen, etwa von News oder Produkten, lässt sich über ein einfaches Mapping von Datenbank- zu Indexfeldern steuern. Dabei unterstützen Helfer-Objekte die Index-Queue, indem sie Rich-Text-Editor-Felder aufbereiten, Relationen auflösen und kommaseparierte Listen splitten. Auch hier werden Übersetzungen und Zugriffsrechte automatisch erkannt.
Für nicht abgedeckte Spezialfälle stehen überdies Interfaces zur Verfügung, die die Implementierung eigener Indexer erlauben. Damit ist die Index-Queue nicht nur schneller und präziser, sondern auch flexibler und entsprechend effizienter als ihr Vorgänger.
Solr für TYPO3 selbst einsetzen
Wer heute Solr mit seiner TYPO3-Installation einsetzen möchte, ist gezwungen, seinen Server entsprechend zu erweitern. Doch während dies bei Version 1 noch manuell erfolgen musste, bringt die Solr-Extension nun ein Shell-Skript mit, das die Installation durchführt. Der Installer lädt Tomcat, Solr und auf TYPO3 angepasste Konfigurationsdateien, am Ende wird Solr gestartet und ist bereit zum Einsatz.
Kunden eines Hosting-Anbieters ohne Root-Rechte sind auf den Provider angewiesen. Doch die bekannten TYPO3-Hoster haben bereits entsprechende Produkte im Angebot.
Installation
Nach erfolgreicher Installation im Extension Manager benötigt TYPO3 die Standard-TypoScript-Konfiguration als statisches Template. Um die Änderungen sowie die konfigurierten Solr-Verbindungen zu erkennen, ist ein Leeren des Konfigurations-Caches im Anschluss nötig.
Die Standard-Konfiguration erwartet den Solr-Server unter http://localhost:8080/solr/; an diese Stelle installiert auch das Shell-Skript den Solr-Server. Anpassungen der Einstellungen sind via TypoScript über „plugin.tx_solr.solr“ möglich.
Indexierung
Die Konfiguration der Index-Queue erfolgt über TypoScript in „plugin.tx_solr.index.queue“. Für die Indexierung von Seiten ist hier nichts zu tun, weil durch die Standard-Konfiguration schon alle notwendigen Einstellungen vorbereitet sind. Zusätzlich enthält die Extension eine Beispiel-Konfiguration für tt_news. An dieser kann man sich orientieren, wenn es etwa darum geht, Daten aus eigenen Extensions zu indexieren. Die News-Indexierung ist standardmäßig deaktiviert, was „plugin.tx_solr.index.queue.tt_news = 1“ ändert.
Als nächstes muss die Index-Queue initialisiert werden. Dies geschieht über das Suche-Modul in den Admin-Werkzeugen und mit dem Button „Initialize Index Queue“. Damit werden alle Seiten und News in der Index-Queue erfasst. Nun fehlt noch ein „Index Queue Worker“-Task im Scheduler, für den sich sowohl die Intervalle als auch die Zahl der Einträge je Seite definieren lassen.
Der Task muss nun ausgeführt werden, bis die Seite zu 100 Prozent indexiert ist. Die Inhalte wären jetzt aber noch nicht auffindbar, denn Solr benutzt einen Zwischenspeicher, in dem neue Dokumente zunächst abgelegt werden, um nicht bei jedem neuen Dokument den Index neu zu schreiben. Die mit der Extension mitgelieferte Solr-Konfiguration sorgt aber dafür, dass spätestens nach einer Stunde oder nach 100 Dokumenten diese automatisch in den Index aufgenommen werden. Manuell lässt sich das Schreiben auch über den Button „Commit Pending Documents“ starten.
Suche
Um den Besuchern die Möglichkeit zu geben, die Suche auch zu nutzen, kommt das Such-Plugin zum Einsatz; die Standard-Einstellungen sind fürs Erste ausreichend. Damit ist die Suche einsatzbereit und läuft fortan dank Record Monitor, Index-Queue und Garbage Collection quasi im Autopiloten-Modus. Genauere Erläuterungen zu Installation und Konfiguration finden sich sowohl im TYPO3 Forge Wiki [6] als auch über die Mailingliste [7]. Zum Solr-Server findet sich darüber hinaus auch Literatur zu Installation und Konfiguration [8].
Suchergebnisse einschränken
Neben der Suche eignet sich Solr aber noch für mehr. Denn dank einer flexiblen Template-Engine ist es möglich, schnell neue Darstellungen von Datensätzen umzusetzen, um die Suchergebnisse direkt zu filtern. Dabei wird die Darstellung der Ergebnislisten durch die Solr-Extension selbst übernommen und die Extension, die die Daten liefert, muss sich nur noch um die oft viel einfachere Einzelansicht kümmern. Dabei muss die Listenansicht nicht zwangsweise eine tatsächliche Liste sein, auch Thumbnail-Raster oder ganze Shop- und Katalogsysteme sind möglich.
Die tatsächliche Funktionsweise dieser Filter-Mechanismen erklären sich idealerweise an einem Beispiel. Dieses ist in Form einer kleinen Extension (Solr Boutique, „solr_boutique“) mitsamt Dokumentation im TYPO3 Extension Repository verfügbar.
Weitere Roadmap
Nachdem nun etwa ein Jahr seit dem letzten Release vergangen ist, legt Version 2.0 einen neuen Grundstein, auf den fortan in kürzeren Abständen aufgebaut werden soll. Neben dem Ausbau des Backend-Moduls stehen vor allen Dingen eine Geo-Suche und die Unterstützung der Workspaces auf dem Programm.
Danke für den coolen Beitrag. Noch ne technische Frage:
Wenn man mehrere Typo3 Installationen auf dem Server hat kann man dies auch für mehrere Installationen nutzen?
Installiert sich der Solr-Server für jede Installation einzeln oder gibt es dann einen Solr-Server als Dienst welcher dann verschiedene „Mandate“ pflegt?
Ist das überhaupt zu empfehlen oder lieber pro Installation wo SOLR nötig ist lieber eigene Umgebung?
Der Apache Solr Server kann mehrere Index-Kerne bereitstellen. Je nach Strategie können dann verschiedene TYPO3 Installationen einen eigenen Index-Kern nutzen oder sich einen Kern teilen. Die einzelnen Index-Dokumente werden durch die Site-ID eindeutig identifiziert.
BTW: Bald started unser SaaS für Apache-Solr: http://www.hosted-solr.com/
Hallo zusammen,
das Release der 2.0 Version ist ja schon ein paar Tage her, aber ich möchte die Index-Queue nicht mehr missen. Die generelle Queue-Konfiguration via TypoScript und seit Neuestem auch die Priorisierung von verschiedenen Index-Typen ermöglicht einen schnellen Aufbau des Suchindexes für umfassende Websites. Spezielle Projekt-Anforderungen lassen sich ebenfalls schnell durch einen eigenen Indexer abdecken.
Vielleicht hilft mein Artikel noch jemanden bei der Installation:
http://www.internetagentur-kaufmann.de/blog/artikel/typo3-solr-suche-die-10-haeufigsten-konfigurationfehler/
Solr in TYPO3 macht einfach Spaß – Schnell. Schneller. Solr.
Beste Grüße
Mirko
Toller Beitrag. Vielen Dank!