Solr
Was ist Solr?
Apache Solr ist eine hochzuverlässige, skalierbare und fehlertolerante Suchplattform, die verteilte Indizierung, Replikation, lastverteilte Abfragen, automatisches Failover und Recovery, zentralisierte Konfiguration und mehr bietet. Solr treibt die Such- und Navigationsfunktionen vieler der größten Internetseiten der Welt an und ermöglicht leistungsstarke Volltextsuche zusammen mit Trefferhervorhebung, facettierter Suche, Echtzeit-Indizierung, dynamischem Clustering, Datenbankintegration und umfangreicher Dokumentenverarbeitung.
Solr basiert auf Apache Lucene, einer leistungsstarken, funktionsreichen Suchmaschinen-Bibliothek, die in Java geschrieben ist. Solr erweitert Lucene mit HTTP-APIs, was die Nutzung aus praktisch jeder Programmiersprache erleichtert. Die externe Konfiguration von Solr ermöglicht es, die Software an viele Arten von Anwendungen anzupassen, ohne Java-Programmierung zu benötigen, und es verfügt über eine Plugin-Architektur für fortgeschrittenere Anpassungen.
Für Content-Management-Systeme wie TYPO3 bietet Solr leistungsstarke Suchfunktionen, die die Benutzererfahrung erheblich verbessern können, indem sie schnelle und relevante Suchergebnisse über die gesamten Website-Inhalte ermöglichen.
Eine Solr-Datenbank erstellen
Du kannst eine Solr-Suchmaschine in deiner mittwald Hosting-Umgebung mit Containern bereitstellen. Es gibt verschiedene Ansätze, um Solr einzurichten:
Verwendung von Terraform (Empfohlen)
Der bequemste Weg, eine Solr-Datenbank bereitzustellen, ist die Verwendung von Terraform mit unserem Solr-Modul. Das folgende Beispiel zeigt, wie du dieses Modul in deinem eigenen Terraform-Deployment verwenden kannst:
module "solr" {
source = "mittwald/solr/mittwald"
project_id = var.project_id
solr_version = "9"
solr_core_name = "typo3"
solr_heap = "2g"
}
output "solr_url" {
value = module.solr.url
}
Der solr_version
-Input kann jeder gültige Docker-Tag aus dem offiziellen solr
-Repository sein. Verwende 9
, um einfach die neueste verfügbare Version von Solr 9 zu nutzen, oder einen spezifischeren Tag wie 9.9
.
Danach kannst du auf dein Solr-Backend über die vom Terraform-Output zurückgegebene URL zugreifen. In der Regel sollte die URL http://solr:8983
sein. Beachte, dass diese URL nur innerhalb der Hosting-Umgebung zugänglich ist (z.B. von deinen Anwendungs-Containern oder über SSH).
Um von deinem lokalen Rechner auf deinen Solr-Container zuzugreifen (ohne ihn mit einer Domain zu verbinden), kannst du den Befehl mw container port-forward
verwenden:
$ mw container port-forward solr
Während dieser Befehl läuft, solltest du dich über die URL http://localhost:8983
mit deiner Solr-Instanz verbinden können.
TYPO3-spezifische Terraform-Einrichtung
Für TYPO3-Projekte bieten wir ein spezielles Terraform-Modul, das Solr automatisch mit den notwendigen Schema- und Konfigurationsdateien konfiguriert, die für TYPO3 optimiert sind:
module "solr" {
source = "mittwald/solr/mittwald"
project_id = var.project_id
solr_version = "9"
solr_core_name = "typo3"
solr_heap = "2g"
}
module "solr_typo3" {
source = "mittwald/solr/mittwald//modules/typo3"
solr_stack_id = module.solr.stack_id
solr_core_name = "typo3"
solr_core_language = "english"
typo3_solr_version = "13.0.3"
}
output "solr_url" {
value = module.solr.url
}
Für mehrsprachige TYPO3-Installationen kannst du separate Cores für jede Sprache erstellen:
module "solr" {
source = "mittwald/solr/mittwald"
project_id = var.project_id
solr_version = "9"
solr_heap = "2g"
}
module "solr_typo3" {
source = "mittwald/solr/mittwald//modules/typo3"
for_each = toset(["german", "english"])
solr_stack_id = module.solr.stack_id
solr_core_name = "typo3_${each.key}"
solr_core_language = each.key
typo3_solr_version = "13.0.3"
}
output "solr_url" {
value = module.solr.url
}
Das TYPO3-Modul führt automatisch folgende Aktionen aus:
- Lädt und installiert die entsprechende
schema.xml
für die angegebene Sprache - Konfiguriert sprachspezifische Analyzer und Filter
- Richtet die erforderliche TYPO3 Solr Plugin JAR-Datei ein
- Erstellt core.properties mit der korrekten Konfiguration
- Installiert zusätzliche Konfigurationsdateien wie protwords, synonyms und stopwords
Die typo3_solr_version
sollte mit der Version der TYPO3 Solr-Erweiterung übereinstimmen, die du in deinem Projekt verwendest.
Verwendung der mStudio-Benutzeroberfläche
Alternativ kannst du einen Solr-Container manuell einrichten:
-
Gehe in deinem Projekt in mStudio auf den Container-Menüpunkt und erstelle einen neuen Container. Du kannst einen beliebigen Namen wählen.
-
Gib als Image entweder
solr:9
oder eine spezifischere Versionsnummer wiesolr:9.9
ein, je nachdem, wie spezifisch die Version eingeschränkt werden soll. Du kannst den Entrypoint und das Command wie vorgeschlagen beibehalten. -
(optional, aber empfohlen) Um automatisch einen Solr-Core beim Container-Start zu erstellen, ändere das Command zu
solr-precreate <corename>
. Ersetze dabei<corename>
durch einen Namen deiner Wahl. -
Um deine Solr-Daten persistent zu speichern, erstelle ein Volume unter Volumes wie folgt:
- Volume: Neues Volume erstellen
- Pfad im Container (Mount Point):
/var/solr
-
Setze die folgenden Umgebungsvariablen für den Container:
# nach Bedarf anpassen
SOLR_HEAP=512m
SOLR_CONFIG_LIB_ENABLED=true
SOLR_MODULES=scripting,analytics,analysis-extras,langid,clustering,extraction
Die vorgeschlagenen Port-Werte sind im Solr-Kontext Standard und können unverändert übernommen werden. Der Standardport für Solr ist 8983.
Verwendung der CLI mit mw container run
Du kannst auch einen Solr-Container mit der mittwald CLI und dem Befehl mw container run
bereitstellen:
mw container run \
--name solr \
--env SOLR_HEAP=512m \
--env SOLR_CONFIG_LIB_ENABLED=true \
--env SOLR_MODULES=scripting,analytics,analysis-extras,langid,clustering,extraction \
--volume solr-data:/var/solr \
--publish 8983:8983 \
--create-volumes \
solr:9.9 solr-precreate typo3
Dieser Befehl erstellt einen neuen Container namens "solr" mit dem Solr-Image, setzt die notwendigen Umgebungsvariablen einschließlich der Aktivierung der lib-Verzeichnis-Konfiguration und zusätzlicher Solr-Module, und mountet ein Volume für die persistente Datenspeicherung.
Verwendung der CLI mit mw stack deploy
Wenn du Docker Compose bevorzugst, kannst du eine docker-compose.yml
-Datei erstellen und sie mit dem Befehl mw stack deploy
bereitstellen:
-
Erstelle eine
docker-compose.yml
-Datei mit folgendem Inhalt:version: "3"
services:
solr:
image: solr:9.9
command: solr-precreate typo3
environment:
- SOLR_HEAP=512m
- SOLR_CONFIG_LIB_ENABLED=true
- SOLR_MODULES=scripting,analytics,analysis-extras,langid,clustering,extraction
ports:
- "8983:8983"
volumes:
- solr-data:/var/solr
volumes:
solr-data: -
Stelle den Stack mit der CLI bereit:
mw stack deploy
Dieser Ansatz ist besonders nützlich, wenn du mehrere Container deployen möchtest, die zusammenarbeiten.
Auf den Container zugreifen
Zugriff auf deinen Container innerhalb deiner Hosting-Umgebung
Sobald der Container läuft, kannst du überprüfen, ob die Instanz verfügbar ist, indem du über curl
darauf zugreifst:
curl -X GET "http://solr:8983/solr/admin/info/system"
Du solltest eine Antwort mit Informationen über deine Solr-Instanz erhalten, einschließlich Version, Speichernutzung und Systemeigenschaften.
Zugriff auf Solr von außerhalb der Hosting-Umgebung
Die Solr-URL (http://solr:8983
) ist nur innerhalb der Hosting-Umgebung zugänglich. Um von deinem lokalen Rechner oder aus dem Internet auf Solr zuzugreifen, hast du zwei Möglichkeiten:
Option 1: Verwendung von Port-Forwarding
Du kannst die mittwald CLI verwenden, um den Solr-Port auf deinen lokalen Rechner weiterzuleiten:
mw container port-forward solr 8983:8983
Dieser Befehl erstellt einen sicheren Tunnel zwischen deinem lokalen Rechner und dem Solr-Container. Nach Ausführung dieses Befehls kannst du auf die Solr-Admin-Oberfläche unter http://localhost:8983/
in deinem lokalen Webbrowser zugreifen.
Option 2: Verbinden einer Domain
Für einen dauerhafteren Zugriff kannst du eine Domain mit deinem Solr-Container verbinden:
- Gehe in mStudio zu Domains und füge eine neue Domain oder Subdomain hinzu (z.B.
solr.deinedomain.de
) - Konfiguriere die Domain so, dass sie auf deinen Solr-Container auf Port 8983 zeigt
- Sobald die DNS-Änderungen propagiert sind, kannst du auf Solr unter
http://solr.deinedomain.de/
zugreifen
Beachte, dass du bei dieser Option eine ordnungsgemäße Authentifizierung implementieren solltest, um deine Solr-Instanz vor unbefugtem Zugriff zu schützen.
Einen Solr-Core erstellen
Wenn du keinen Core beim Container-Start erstellt hast (mit dem oben erwähnten solr-precreate
-Befehl), musst du nach dem Einrichten deines Solr-Containers einen Core erstellen, um deine Suchindizes zu speichern. Das kannst du über die Solr-Admin-UI oder über die Kommandozeile tun:
Verwendung der Kommandozeile
Der einfachste Weg, einen neuen Solr-Core zu erstellen, ist die Verwendung des solr create_core
-Befehls und des mw container exec
-Befehls:
$ mw container exec <CONTAINER-ID> 'solr create_core -c typo3'
Manuelle Initialisierung eines TYPO3 Solr-Cores
Wenn du nicht das Terraform TYPO3-Modul verwendest, kannst du einen Solr-Core manuell mit TYPO3-spezifischen Konfigurationsdateien initialisieren, indem du den Befehl mw container cp
verwendest. Dieser Befehl funktioniert ähnlich wie docker cp
:
-
Klone zunächst das Git-Repository der TYPO3 Solr-Erweiterungs, um alle Konfigurationsdateien zu erhalten:
# Klone das Git-Repository der TYPO3 Solr-Erweiterung
git clone https://github.com/TYPO3-Solr/ext-solr.git /tmp/ext-solr
# Navigiere zum Konfigurationsverzeichnis
cd /tmp/ext-solr/Resources/Private/Solr/configsets/ext_solr_13_0_0/conf -
Erstelle die Core-Verzeichnisstruktur im Solr-Container:
mw container exec <CONTAINER-ID> 'mkdir -p /var/solr/data/typo3/conf'
mw container exec <CONTAINER-ID> 'mkdir -p /var/solr/data/typo3/lib' -
Kopiere die Konfigurationsdateien in den Solr-Container:
# Kopiere Hauptkonfigurationsdateien
mw container cp -r /tmp/ext-solr/Resources/Private/Solr/configsets/ext_solr_13_0_0/conf <CONTAINER-ID>:/var/solr/data/typo3/conf
# Kopiere sprachspezifische Dateien (Beispiel für Deutsch)
mw container cp -r /tmp/ext-solr/Resources/Private/Solr/configsets/ext_solr_13_0_0/conf/german <CONTAINER-ID>:/var/solr/data/typo3/conf/german
# Kopiere die TYPO3 Solr Plugin JAR-Datei
mw container cp /tmp/ext-solr/Resources/Private/Solr/typo3lib/solr-typo3-plugin-6.0.0.jar <CONTAINER-ID>:/var/solr/data/typo3/lib/ -
Erstelle die
core.properties
-Datei:mw container exec <CONTAINER-ID> 'echo "name=typo3" > /var/solr/data/typo3/core.properties'
mw container exec <CONTAINER-ID> 'echo "config=solrconfig.xml" >> /var/solr/data/typo3/core.properties'
mw container exec <CONTAINER-ID> 'echo "schema=german/schema.xml" >> /var/solr/data/typo3/core.properties' -
Lade den Solr-Core neu, um die neue Konfiguration anzuwenden:
mw container exec <CONTAINER-ID> 'curl "http://localhost:8983/solr/admin/cores?action=RELOAD&core=typo3"'
-
Bereinige die temporären Dateien:
rm -rf /tmp/ext-solr
Für andere Sprachen ersetze german
in den Dateipfaden durch das entsprechende Sprachverzeichnis (z.B. english
, french
, etc.). Ersetze <CONTAINER-ID>
durch deine tatsächliche Solr-Container-ID, die du mit mw container list
finden kannst.
Verwendung der Solr-Admin-UI
Alternativ kannst du die Solr-Admin-UI verwenden, um einen neuen Core zu erstellen. Für einen TYPO3 Solr-Core folge zunächst den Schritten 1-3 aus dem Abschnitt zur manuellen Initialisierung oben, um alle notwendigen TYPO3-Konfigurationsdateien und die Plugin JAR-Datei vorzubereiten.
Nachdem die Voraussetzungen erfüllt sind, kannst du den neuen Core über die Solr-Admin-UI erstellen:
- Greife auf die Solr-Admin-UI zu, indem du eine der in Zugriff auf Solr von außerhalb der Hosting-Umgebung beschriebenen Methoden verwendest
- Klicke auf den Menüpunkt "Core Admin"
- Klicke auf "Add Core" und fülle die erforderlichen Felder aus:
- name: Der Name deines Cores (z.B. "typo3")
- instanceDir:
/var/solr/data/typo3
(oder dein gewähltes Core-Verzeichnis) - dataDir: Belasse es bei der Standardeinstellung oder gib ein benutzerdefiniertes Verzeichnis an
- config:
solrconfig.xml
- schema:
schema.xml
- Klicke auf "Add Core", um den TYPO3 Solr-Core zu erstellen
Betrieb
Solr läuft, solange der Container läuft. Wenn du Solr als Suchmaschine für dein CMS verwendest, müssen die Suchindizes von deiner Anwendung befüllt werden. Dafür bieten viele CMS-Plattformen Integrationen an.
Das Volume wird automatisch in das reguläre Backup deines Projekts einbezogen.
Einrichtung von Solr mit TYPO3 CMS
TYPO3 CMS kann mit Solr über die Erweiterung solr
integriert werden. Dieser Abschnitt bietet eine Schritt-für-Schritt-Anleitung zur Konfiguration von TYPO3 mit deiner Solr-Instanz.
Installation der Solr-Erweiterung
-
Installiere die Solr-Erweiterung mit Composer:
composer require apache-solr-for-typo3/solr
Oder lade sie aus dem TYPO3 Extension Repository herunter und installiere sie über den Extension Manager.
-
Nach der Installation gehe zum Extension Manager im TYPO3-Backend und aktiviere die Erweiterung.
Konfiguration der Solr-Verbindung
-
Erstelle oder bearbeite deine Site-Konfiguration in TYPO3 (Site Management > Sites).
-
In der Site-Konfiguration gehe zum Tab "Solr" und konfiguriere die Verbindung:
- Scheme und Port:
http
und8983
- Host:
solr
(der Hostname deines Solr-Containers) - Port:
8983
(der Standard-Solr-Port) - URL path to Apache solr server:
/
- Scheme und Port:
-
Konfiguriere dann pro Sprache deiner Site-Konfiguration den Namen des Solr-Cores. Wenn deine Website mehrere Sprachen hat, solltest du einen Core pro Sprache erstellen.
- Corename:
typo3
(oder der Name des Cores, den du erstellt hast)
- Corename:
-
Speichere die Konfiguration.
Konfiguration von TypoScript
Um schnell zu starten, füge die statischen TypoScript-Templates ein, die von der Erweiterung bereitgestellt werden. Weitere Informationen findest du im Handbuch der Erweiterung.
Initialisierung des Index
Für die erstmalige Initialisierung des Suchindex, siehe das Erweiterungshandbuch.