Zum Hauptinhalt springen

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:

  1. Gehe in deinem Projekt in mStudio auf den Container-Menüpunkt und erstelle einen neuen Container. Du kannst einen beliebigen Namen wählen.

  2. Gib als Image entweder solr:9 oder eine spezifischere Versionsnummer wie solr:9.9 ein, je nachdem, wie spezifisch die Version eingeschränkt werden soll. Du kannst den Entrypoint und das Command wie vorgeschlagen beibehalten.

  3. (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.

  4. 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
  5. 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:

  1. 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:
  2. 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:

  1. Gehe in mStudio zu Domains und füge eine neue Domain oder Subdomain hinzu (z.B. solr.deinedomain.de)
  2. Konfiguriere die Domain so, dass sie auf deinen Solr-Container auf Port 8983 zeigt
  3. 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:

  1. 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
  2. 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/

    # 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
  3. Kopiere die JAR-Datei für das TYPO3-Solr-Plugin:

    # Kopiere die TYPO3 Solr Plugin JAR-Datei
    mw container exec <CONTAINER-ID> 'mkdir -p /var/solr/data/typo3/lib'
    mw container cp /tmp/ext-solr/Resources/Private/Solr/typo3lib/solr-typo3-plugin-6.0.0.jar <CONTAINER-ID>:/var/solr/data/typo3/lib/
  4. 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'
  5. 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"'
  6. 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:

  1. Greife auf die Solr-Admin-UI zu, indem du eine der in Zugriff auf Solr von außerhalb der Hosting-Umgebung beschriebenen Methoden verwendest
  2. Klicke auf den Menüpunkt "Core Admin"
  3. 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
  1. 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​

  1. 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.

  2. Nach der Installation gehe zum Extension Manager im TYPO3-Backend und aktiviere die Erweiterung.

Konfiguration der Solr-Verbindung​

  1. Erstelle oder bearbeite deine Site-Konfiguration in TYPO3 (Site Management > Sites).

  2. In der Site-Konfiguration gehe zum Tab "Solr" und konfiguriere die Verbindung:

    • Scheme und Port: http und 8983
    • Host: solr (der Hostname deines Solr-Containers)
    • Port: 8983 (der Standard-Solr-Port)
    • URL path to Apache solr server: /
  3. 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)
  4. 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.