Suche und Datenschutz
Volltextsuche mit Elasticsearch: Suchfeld, Index, Aktualisierung, Ausfallverhalten – und warum die Website ohne CDN auskommt.
Suchen
Das Suchfeld oben rechts, links neben DE | EN, schickt die Anfrage an die Suchseite Suche (/suche, englisch /en/search). Dort zeigt das Plugin „Suche“ die Treffer der aktuellen Sprache, jeweils mit Pfad, Titel und den hervorgehobenen Textstellen. Ab zehn Treffern lässt sich blättern.
- Alle Wörter müssen vorkommen. Kleine Tippfehler werden toleriert: „Kaycloak“ findet „Keycloak“.
- Das letzte Wort zählt auch als Wortanfang: „Dockerf“ findet „Dockerfile“.
- Wortformen werden zusammengeführt: „Datenbanken“ findet „Datenbank“, „volumes“ findet „volume“.
Der Suchindex
Jede Sprache hat einen eigenen Index, typo3_0_de und typo3_1_en, jeweils mit deutscher bzw. englischer Stammformreduktion. Indexiert werden Titel, Untertitel, Zusammenfassung, Beschreibung und alle Inhaltselemente der öffentlich sichtbaren Standardseiten.
Nicht im Index landen:
- versteckte Seiten und Inhalte sowie solche außerhalb ihres Start-/Stoppdatums,
- Seiten mit Zugriffsbeschränkung (Frontend-Benutzergruppen),
- Seiten mit der Option „Nicht durchsuchen“ (Reiter Verhalten), etwa die Suchseite selbst,
- englische Seiten ohne Übersetzung.
Aktualisiert wird der Index auf drei Wegen:
| Wann | Wie |
|---|---|
| Speichern, Verschieben, Verstecken oder Löschen im Backend | sofort, per DataHandler-Hook |
| alle 15 Minuten | voller Abgleich im Container scheduler |
bei jedem Start des Containers php | voller Abgleich im Entrypoint |
docker compose exec -u www-data php vendor/bin/typo3 search:index # von Hand abgleichen
Suchseite
Bei der Erstinstallation legt typo3 site:setup-search die Seite „Suche“ mit dem Plugin an. Sie steht nicht im Menü und wird selbst nicht durchsucht. Ihre Seiten-ID steht im Site-Setting sitePackage.searchPageUid (Datei config/sites/main/settings.yaml, im Backend unter Sites → Einstellungen). Daran erkennt das Suchfeld sein Ziel. Ist dort nichts eingetragen, bleibt das Suchfeld ausgeblendet.
In einer bestehenden Installation ohne Suchseite:
docker compose exec -u www-data php vendor/bin/typo3 site:setup-search
docker compose exec -u www-data php vendor/bin/typo3 cache:flush
Elasticsearch betreiben
- Zugang: Benutzer
elasticmit dem PasswortELASTICSEARCH_PASSWORDaus der.env. Der Dienst veröffentlicht keinen Port, nurphpundschedulererreichen ihn im Docker-Netz. - Speicher:
ELASTICSEARCH_JAVA_OPTSlegt den Heap fest, Standard 512 MB. Der Container braucht etwa das Doppelte an Arbeitsspeicher. - Ausfall: Läuft Elasticsearch nicht, startet TYPO3 trotzdem. Die Suchseite meldet „nicht verfügbar“, Speichern im Backend funktioniert weiter, und im TYPO3-Log steht eine Warnung. Spätestens 15 Minuten nach der Rückkehr ist der Index wieder aktuell.
- Daten: Der Index liegt im Volume
es-data. Er lässt sich jederzeit aus der Datenbank neu aufbauen und ist deshalb nicht Teil des Backups.
# Indizes und Anzahl der Dokumente anzeigen
docker compose exec elasticsearch sh -c \
'curl -s -u "elastic:$ELASTIC_PASSWORD" "localhost:9200/_cat/indices?v"'
Datenschutz: keine CDNs
Jede Datei, die ein Browser von einem fremden Server lädt, übermittelt diesem die IP-Adresse des Besuchers. Für Schriften, Icons oder Skripte von einem CDN bräuchte es daher eine Rechtsgrundlage nach DSGVO. Die Appliance vermeidet das vollständig: Alle Ressourcen kommen vom eigenen Server.
- Icons: Font Awesome Free 7.3.1 liegt im Sitepackage unter
Resources/Public/Vendor/fontawesome/(CSS, Webfonts und Lizenz). Heruntergeladen wurde es einmalig von npm und gegen die veröffentlichte Prüfsumme geprüft. - Schrift: die Systemschrift des Geräts (
system-ui), keine Web-Fonts. - Elasticsearch: Der automatische Download der GeoIP-Datenbank, also eine Verbindung zu Elastic, ist abgeschaltet, ebenso Machine Learning.
Icons verwendet man im Template so:
<i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>