Handbuch

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:

WannWie
Speichern, Verschieben, Verstecken oder Löschen im Backendsofort, per DataHandler-Hook
alle 15 Minutenvoller Abgleich im Container scheduler
bei jedem Start des Containers phpvoller 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 elastic mit dem Passwort ELASTICSEARCH_PASSWORD aus der .env. Der Dienst veröffentlicht keinen Port, nur php und scheduler erreichen ihn im Docker-Netz.
  • Speicher: ELASTICSEARCH_JAVA_OPTS legt 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>