Solr Einrichtung in TYPO3

|
Lupe auf Landkarte mit Solr Logo

Betreiber großer TYPO3 Installationen haben häufig Probleme, eine performante Suchfunktion zu realisieren. Je weiter der Inhalt der Installation wächst, desto langsamer wird die TYPO3-eigene Suchfunktion, auch indexed_search bildet da keine Ausnahme.

Mit Solr nutzt man die Vorteile einer Onlinesuche so effektiv wie möglich! Die Verwendung von Solr verschafft aber nicht nur den Mehrwert einer schnellen Online-Suche, denn die folgenden modernen Suchfunktionen sind bereits in den Erweiterungen implementiert und können entsprechend konfiguriert werden:

  • Suchvorschläge (Bekannt durch Google Suggest)
  • Rechtschreibkorrektur (“Meinten Sie… ?”)
  • Synonymsuche
  • Facettierung in den Suchergebnissen

Eine Lösung für solche Probleme bietet Apache Solr – die schnelle Suche für umfangreiche Installationen. Entwachsen aus dem Lucene Projekt der Apache Foundation bietet diese „Enterprise Search Engine“ ein hohes Maß an Performance beim Durchsuchen großer Mengen von Daten. Der entscheidende Unterschied zur herkömmlichen Suche liegt dabei in der Art und Weise, wie die Daten vorgehalten werden. Statt die Datenbank direkt zu durchsuchen, hält Solr die einmal indizierten Daten permanent im Arbeitsspeicher der Solr Cores vor. Bei einer Anfrage kann hierauf deutlich schneller zugegriffen werden als auf den Inhalt einer Datenbank oder des Dateisystems.

Neben Volltext- oder Facettensuche ist Solr außerdem in der Lage, Rich-Dokumente, wie Word- oder PDF Dateien, zu indizieren. Weiterhin bietet Solr Hit Highlighting, strukturierte oder textuelle Suche und viele andere Features.

Dieser Blog Beitrag beschreibt im folgenden die Integration der Index-Suche mit Solr (Extension Version 2.8.2) in eine bestehende TYPO3 Installation und umfasst alle Arbeitsschritte vom Anlegen des Solr Kerns bis hin zur Einrichtung der TYPO3 Extension.

1. Einen neuen Solr Kern anlegen

Das gebuchte Solr Paket steht nach einem Login ins Kundencenter zur Verfügung und enthält bereits einen Kern (default), der zur Einrichtung der Suche mit TYPO3 zunächst gelöscht werden kann. Anschließend wird über die Schaltfläche „Kern hinzufügen“ ein neuer Solr Kern erzeugt.

apache solr hosting
Solr-Paket in Mittwald Kundencenter

Name und Notiz sind beim Anlegen des Kerns frei wählbar und dienen lediglich der Übersicht, sie sollten jedoch keine Leerzeichen oder Umlaute enthalten. Als Konfigurationsvorlage wird „TYPO3-Extension Solr“ in der aktuellsten Version verwendet. Die Sprache bleibt, soweit nicht anders erforderlich, bei Deutsch und als Arbeitsspeicher wird der gewünschte Wert zugeteilt, der dem Kern zur Verfügung stehen soll. Hierbei ist zu beachten, dass nur Seiten, die sich im Solr Arbeitsspeicher befinden, bei einer Suche schnell ausgeliefert werden können. Deswegen ist es ratsam, sich bei der Zuweisung des Arbeitsspeichers an der Seitenanzahl der TYPO3 Installation zu orientieren, ein Schätzwert von 0,25 MB pro Seite sollte ein akzeptables Resultat liefern. Solr erstellt ein Ranking nach Frequentierung der Seiten und legt so fest, welche Seiten im Arbeitsspeicher vorgehalten werden und welche ggf. auf die Festplatte ausgelagert werden, wo kein schneller Zugriff mehr möglich ist.

Nach Eingabe des zugewiesenen Arbeitsspeichers wird der Dialog mit „Speichern“ beendet.

2. TYPO3 und die Solr Extension konfigurieren

Zunächst muss überprüft werden, ob die folgenden Suchmarker im Template der Website (nicht im TYPO3 Template Modul) vorhanden sind:

<!--TYPO3SEARCH_begin-->
<!--TYPO3SEARCH_end-->

Dies ist am einfachsten über die „Seitenquelltext anzeigen“-Funktion des Browsers und die Verwendung der Suche möglich. Sollten die Marker nicht existieren, werden diese Marker im Template so gesetzt, dass sie den gewünschten Content umschließen.

Anschließend wird die TYPO3 Solr Extension, die für die Suche benötigt wird, über den TYPO3 Extension Manager installiert. Der Extension Key dieser Extension lautet „solr“.

solr typo3 extension
Installation der TYPO3 Solr Extension

Als nächstes müssen die Verbindungsdaten zum Solr Kern im TYPO3 Template-Modul in den Konstanten hinterlegt werden.
Hierzu wird folgendes Typoskript verwendet, das um die jeweiligen individuellen Daten ergänzt wird:

plugin.tx_solr.solr.scheme = http
plugin.tx_solr.solr.host = solrXXXX:PASSWORTsolrXXX.solr-hosting.info
plugin.tx_solr.solr.port = 80
plugin.tx_solr.solr.path = /Name_des_Kerns/

(Als Platzhalter dienen hier alle „X“, „PASSWORT“ sowie „Name_des_Kerns“)

Anschließend sollte überprüft werden, ob die Indexierung der Seiten aktiviert ist. Dies lässt sich unter „Templates -> Setup“ überprüfen. Sollte dies nicht der Fall sein, kann das Typoskript Template um den Eintrag page.config.index_enable = 1 erweitert werden, um die Indexierung zu aktivieren.

Diese Angabe sollte sicherheitshalber ans Ende des Templates geschrieben werden, da TYPO3 untere Einträge höher priorisiert als obere.

Als nächstes müssen die notwendigen Suchmarker aktiviert werden. Hierzu wird die Root-Seite ausgewählt, das Menü „Template -> Vollständigen Template-Datensatz Bearbeiten -> Optionen“ aufgerufen, und der Haken bei „Wurzelebene“ gesetzt.

konfiguration von solr
Ausgewählter Reiter "Optionen" in TYPO3 Backend

Unter dem Reiter „Enthält“ wird anschließend das statische Template „Apache Solr (solr)“ hinzugefügt.

übersicht der konfiguration von solr
Aufbau einer TYPO3-Seite

Hiernach wird überprüft, ob die Base URL in „Template -> Setup“ hinterlegt ist. Sollte dies nicht der Fall sein, kann diese mit config.BaseURL = gesetzt werden, wobei natürlich die zur Website gehörige Domain verwendet wird.
Des Weiteren muss der Domänen-Record auf der Root-Seite angepasst werden. Dieser sollte der Base URL entsprechen, das „http://“ und der abschließende „/“ darf hier jedoch NICHT enthalten sein. Sollte dieser Record nicht existieren, kann er auf der Root-Seite unter „Liste -> Neuer Datensatz -> Domäne“ hinzugefügt werden.

einstellungen von solr
Pfadauswahl "Liste", dann die Website und zuletzt "Domäne"

Anschließend wird die Solr Verbindung initialisiert. Dies geschieht über den Button „Initialize Solr connections“ im „Cache Löschen“ Menü. Danach muss der TYPO3 Cache geleert werden.

solr cache connections
Möglichkeit, verschiedene Cache-Arten zu löschen

Ob die Verbindung korrekt aufgebaut werden konnte, lässt sich nun unter dem Punkt „Reports -> Statusbericht“ überprüfen. Die Informationen über die Solr Konfiguration befinden sich meist im unteren Teil.

statusbericht von solr
Statusbericht, die erfolgreichen Aufbau der Verbindung anzeigt

Als nächstes wird im Planer ein neuer Task der Klasse „Index Queue Worker“ benötigt, der die Seiten indiziert.

Der Typ ist „wiederkehrend“, die Häufigkeit kann entsprechend des im Tarif verfügbaren Cronjob-Intervalls gesetzt werden und sollte geringer sein als die Häufigkeit des „Commit Solr Index“. Die Anzahl der zu indizierenden Seiten sollte mit Blick auf das vorhandene Hosting Paket gewählt werden. Je mehr Seiten auf einmal indiziert werden, desto größer ist die Belastung für das Hostingpaket.

geplante tasks
Hinzufügen eines Tasks mit verschiedenen Einstellungsmöglichkeiten

Zum Test können nun die Tasks „Index Queue Worker“ und „Commit Solr Index“ nacheinander manuell im Planer ausgeführt werden. Ist die Einrichtung korrekt erfolgt, wird die Ausführung mit einer grünen Box quittiert, der Index Queue Worker zeigt außerdem einen „Progress“ in Prozent an.

commit soir index
Bestätigung, dass Solr Index eingerichtet wurde

Kommentare

Christian am
Hallo,

wie werden denn Tables von anderen Extensions indiziert? Habe versucht, das news Beispiel zu indizieren, leider ohne Erfolg:


news = 1
news {
table = tx_news_domain_model_news

fields {
abstract = teaser

author = author
authorEmail_stringS = author_email

title = title

content = SOLR_CONTENT
content {
cObject = COA
cObject {
10 = TEXT
10 {
field = bodytext
noTrimWrap = || |
}
}
}

category_stringM = SOLR_RELATION
category_stringM {
localField = categories
multiValue = 1
}

keywords = SOLR_MULTIVALUE
keywords {
field = keywords
}

tags_stringM = SOLR_RELATION
tags_stringM {
localField = tags
multiValue = 1
}

url = TEXT
url {
typolink.parameter = {$plugin.tx_news.settings.detailPid}
typolink.additionalParams = &tx_news_pi1[controller]=News&
tx_news_pi1[action]=detail&tx_news_pi1[news]={field:uid}
typolink.additionalParams.insertData = 1
typolink.useCacheHash = 1
typolink.returnLast = url
}
}

attachments {
fields = related_files
}
}

}

plugin.tx_solr.logging.indexing.queue.news = 1

Christian am
Hoppla,

hab die erste Zeile vergessen:

plugin.tx_solr.index.queue {
Kristina El-Issa am
Hallo Christian,

schau doch mal hier: https://docs.typo3.org/typo3cms/extensions/solr/stable/Backend/ResultsPlugin.html

Liebe Grüße
Kristina
Dan Riesen am
Hallo Sebastian,
Danke für die tolle Anleitung.
Kleine Frage von meiner Seite:
Sollte die Zeile
plugin.tx_solr.solr.host = solrXXXX:PASSWORTsolr5XXX.solr-hosting.info
Nicht in
plugin.tx_solr.solr.host = solrXXXX:PASSWORTsolrXXX.solr-hosting.info
geändert werden oder hat die 5 etwas mit der solr version zu tun?

Was ist mit https?
Welcher Port muss ich dann auswählen, wenn der Solr Server bei euch läuft?
plugin.tx_solr.solr.port = 80
Funktioniert wohl nicht, oder?

Danke für das Feedback!
Grüsse Dan
Kristina Kiebe am
Hallo Dan, 

zu deiner ersten Frage: Da ist uns wohl ein Tippfehler unterlaufen. Vielen Dank für den Hinweis. ;-) 
Zu Frage zwei: Der Port für https ist 443. 

Hier gibt es übrigens noch einen aktuelleren Beitrag dazu: https://www.mittwald.de/faq/tipps-und-tricks/solr/solr-in-typo3-einrichten

Viele Grüße aus Espelkamp.
Kristina
René Nitzsche am
Also weitere Alternative möchte ich auf die Extension mksearch verweisen. Diese verfolgt bei der einen anderen Ansatz, der etwas aufwendiger in der Einrichtung ist, aber meiner Ansicht nach bessere Suchergebnisse erzielt. Beim mksearch wird die Seite nicht per Crawler abgesucht. Statt dessen werden direkt die Roh-Datensätze nach der Bearbeitung indexiert. Wenn man also einen Newsbeitrag schreibt, dann wird direkt dieser Datensatz von mksearch analysiert und an Solr zur Indexierung übergeben. In mksearch übernehmen die Verarbeitung die sogenannten Indexer. Und natürlich ist das System so gestaltet, daß man beliebige weitere Indexer integrieren kann.
Auch eine Integration von Tika und damit die Möglichkeit der Integration von Binär-Dokumenten ist vorhanden. Derzeit unterstützt mksearch die LTS-Version 6.2, 7.6 und 8.7.
Link: https://github.com/DMKEBUSINESSGMBH/typo3-mksearch
René Nitzsche am
Also weitere Alternative möchte ich auf die Extension mksearch verweisen. Diese verfolgt bei der einen anderen Ansatz, der etwas aufwendiger in der Einrichtung ist, aber meiner Ansicht nach bessere Suchergebnisse erzielt. Beim mksearch wird die Seite nicht per Crawler abgesucht. Statt dessen werden direkt die Roh-Datensätze nach der Bearbeitung indexiert. Wenn man also einen Newsbeitrag schreibt, dann wird direkt dieser Datensatz von mksearch analysiert und an Solr zur Indexierung übergeben. In mksearch übernehmen die Verarbeitung die sogenannten Indexer. Und natürlich ist das System so gestaltet, daß man beliebige weitere Indexer integrieren kann.
Auch eine Integration von Tika und damit die Möglichkeit der Integration von Binär-Dokumenten ist vorhanden. Derzeit unterstützt mksearch die LTS-Version 6.2, 7.6 und 8.7.
Link: https://github.com/DMKEBUSINESSGMBH/typo3-mksearch
Armin am

"Neben Volltext- oder Facettensuche ist Solr außerdem in der Lage, Rich-Dokumente, wie Word- oder PDF Dateien, zu indizieren" Das geht aber nur mit der extension solrfal, die kostenpflichtig ist, oder?

Hannes Bochmann am
Hallo Armin,

du könntest für die komplette Suche auch die Extension mksearch (https://github.com/DMKEBUSINESSGMBH/typo3-mksearch, http://typo3.org/extensions/repository/view/mksearch ) nutzen. Diese bietet die gewünschten Features, wie Rich-Dokumente durchsuchen, kostenlos out of the box.
Kristina Dahl am
Hallo Armin!

Vielen Dank für deine Rückfrage. :) Da hast du Recht. Du benötigst solrfal und Tika.

Viele Grüße

Kristina
Dennis Laudenbach am

Das Problem mit dem Task „Index Queue Worker“ lag am fehlenden Backend User „_cli_scheduler“. Hier könnte man ggf. noch die Beschreibung erweitern!

Dennis Laudenbach am

Sehr gute Beschreibung!
Es hat auch alles wunderbar funktioniert…bis auf:

– Index Queue Worker
Den Task habe ich manuell im Planer ausgeführt, erhalte auch eine grüne Box mit dem Inhalt „Executed: Index Queue Worker (solr)“ …leider bleibt der „Progress“ aber bei 0% stehen.

(Status war bisher grau – Scheduled und gelb – Late)

– Commit Solr Index
Der Task wurde gar nicht beschrieben und ich finde auch keine entsprechende Möglichkeit diesen zu planen.

> Gehostet wird das ganze natürlich bei Mittwald ;)

Martin H. am
Hallo,
um Dateien (PDF, doc/docx, xls/xlsx,..) auf Typo3 zu indexieren reicht dafür Solr oder ist Tika zwingend notwendig?

Viele Grüße