Große Dokumentensammlungen werden sehr schnell unübersichtlich und man verbringt die Hauptzeit mit Suchen und nicht mit Finden. Da wäre es doch schön, wenn man eine Suchmaschine wie Google hätte. FESS ist eine solche Suchmaschine, die alle möglichen Dokumente duchrsuchen kann. Von indizierbaren PDF-Dateien über Office-Dokumente zu Webseiten und Datenbanken können Informationen durchsucht und danach gefunden werden.
Die Suchmaschine FESS ist hier im Einsatz um nachträglich digitalisierte Dokumente auffindbar zu machen (Firmenarchiv ab ca. 1960). Ein Dienstleister hat die alten Dokumente erfasst und mit OCR als durchsuchbare Dokumente bereitgestellt. Mit FESS werden diese Dokumente indiziert und sind danach auffindbar. Das Archiv umfasst ca. 60.000 PDF-Dokumente, die teilweise mehrere 100MBs groß sind – ca. 1,7TB an Daten. Ein Initial-Scan des Archivs dauert ca. 5 Tage.
Hier beschreibe ich den Einsatz von FESS in einer “normalen” Umgebung, der für Büroumgebungen mit Office-Dokumenten und “normalen” PDFs “out of the box” genügt.
Interessant ist auch zu Erwähnen, dass die Suchmaschine eine sehr gute Rechteverwaltung hat. Man kann seine Dateisystem indizieren lassen und über die Anbindung der zentralen Benutzerverwaltung an FESS den Zugriff auf die Suchergebnisse steuern.
Datum | Änderungen |
---|---|
02.02.2025 | Erstellen der Anleitung |
1. Grundvoraussetzung
- Docker und Docker Compose und Debian/Ubuntu
- Traefik V3 Installation, Konfiguration und CrowdSec-Security
- git installieren: apt update && apt install git
2. Umgebung planen
Die Installation von FESS mit Hilfe von Docker ist gut dokumentiert. Leider fehlen Hinweise für die Dimensionierung von RAM, CPU und Festplattenplatz. Da FESS auf Java aufsetzt kann ich als Grundkonfiguration eine 4-Core CPU mit 16GB RAM empfehlen. Der Plattenplatz hängt sehr stark von euren Dokumenten ab. Plant hier die Möglichkeiten den Plattenplatz dynamisch anzupassen. Im Hintergrund arbeitet OpenSearch, das seinen Suchindex nur bis zu einer gewissen Plattenplatzbelegung vergrößert. Ist die Platte zu voll, dann werden keine Dokumente mehr verarbeitet. Die Meldungen dazu sind in der Logdateien von OpenSearch zu finden.
Auch der Speicherverbrauch von FESS ist in den Logdateien zu sehen. Wird der Fehler java.lang.OutOfMemoryError: Java heap space in den Logdateien gefunden, dann müssen die Einstellungen von OpenSearch und/oder FESS angepasst werden, damit Java mehr RAM nutzen kann.
3. FESS herunterladen
Ist die virtuelle Umgebung eingerichtet, dann kann nach der Anleitung die Umgebung von GIT heruntergeladen werden.
cd /opt/containers/ git clone https://github.com/codelibs/docker-fess.git cd docker-fess/compose
In dem Verzeichnis befinden sich vier compose-Dateien von unterschiedlichen Teilen von FESS. Wir starten mit FESS und OpenSearch.
4. FESS für Traefik vorbereiten
Um die Originaldateien weiterhin im Zugriff zu haben legen wir eine docker-compose.yaml-Datei an, in der wir die Konfiguration von FESS und OpenSearch übertragen.
cat compose.yaml compose-opensearch2.yaml > docker-compose.yaml
Danach passen wir die Datei an. Oder ersetzen die komplette Datei mit folgendem Inhalt:
services: fess01: image: ghcr.io/codelibs/fess:14.18.0 # build: ./playwright # use Playwright container_name: fess01 environment: - "SEARCH_ENGINE_HTTP_URL=http://search01:9200" - "FESS_DICTIONARY_PATH=${FESS_DICTIONARY_PATH:-/usr/share/opensearch/config/dictionary/}" # - "FESS_PLUGINS=fess-webapp-semantic-search:14.18.0 fess-ds-wikipedia:14.18.0" #ports: # - "8080:8080" networks: - search_net - proxy # Netzwerk, das die Anwenung ueber Traefik veroeffentlicht depends_on: - search01 logging: driver: "json-file" options: max-size: "10m" max-file: "5" restart: unless-stopped labels: traefik.enable: true traefik.http.routers.fess.entrypoints: websecure traefik.http.routers.fess.rule: Host(`<DNS-Eintrag, z.B. fess.eigene-Domain.de>`) traefik.http.routers.fess.tls: true traefik.http.routers.fess.service: fess traefik.http.routers.fess.tls.certresolver: http_resolver traefik.http.routers.fess.middlewares: default@file traefik.http.services.fess.loadbalancer.server.port: 8080 traefik.docker.network: proxy search01: image: ghcr.io/codelibs/fess-opensearch:2.17.0 container_name: search01 environment: - node.name=search01 - discovery.seed_hosts=search01 - cluster.initial_cluster_manager_nodes=search01 - cluster.name=fess-search - bootstrap.memory_lock=true - node.roles=cluster_manager,data,ingest,ml - "OPENSEARCH_JAVA_OPTS=-Xms5g -Xmx5g" - "DISABLE_INSTALL_DEMO_CONFIG=true" - "DISABLE_SECURITY_PLUGIN=true" - "FESS_DICTIONARY_PATH=/usr/share/opensearch/config/dictionary" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65535 hard: 65535 volumes: - search01_data:/usr/share/opensearch/data - search01_dictionary:/usr/share/opensearch/config/dictionary # ports: # - 9200:9200 networks: - search_net logging: driver: "json-file" options: max-size: "10m" max-file: "5" restart: unless-stopped volumes: search01_data: driver: local search01_dictionary: driver: local
Sollen später noch die Dienste dashboards2 und MinIO genutzt werden, so ist wichtig, dass in den compose-Dateien der Eintrag
#ports: # - <Ports>:<Ports>
auskommentiert wird. Ansonsten sind die Dienste von Extern über ungesicherte Protokolle zu erreichen.
5. Starten von FESS
Jetzt können wir die Suchmaschine starten, indem wir folgenden Befehl eingeben:
docker compose -f docker-compose.yaml up -d
Nachdem das System gestartet ist empfehle ich mit folgendem Befehl die Logdateien mitzulesen:
docker compose -f docker-compose.yaml logs --follow
Ein STRG-C beendet die Ausgabe der Logdateien.
Da sich zuerst OpenSearch initialisieren muss und danach FESS, kann es einige Minuten dauern, bis ein erster Zugang auf die Webseite möglich ist.
Bei der Anmeldung ist der Login admin und das Passwort admin. Das Passwort muss beim ersten Login geändert werden (sehr vorbildlich!). Die Administrationsoberfläche ermöglicht die weitere Konfiguration, die anhand der Dokumentation vorgenommen werden kann.
Ich kann den Abschnitt TUTORIALS in der Dokumentation empfehlen.
6. Tipps und Tricks
FESS hat noch sehr viele Möglichkeiten. Wer ein paar Ideen braucht, sollte sich die Folien vom Vortrag über FESS auf der Fossdem 2023 anschauen. Einige Ideen von dem Vortrag sind inzwischen in FESS eingeflossen, wie z.B. das Pfad-Mapping.
Für meine eingangs erwähntes Setup habe ich 8 vCPUs, 16 GB RAM und 300GB Festplatte ausgewählt. Für die großen Dokumente musste ich einige Parameter in FESS anpassen, die ich leider bis jetzt noch nicht als Parameter in die compose-Datei hineinbekommen habe. Über die Oberfläche habe ich noch folgende Optimierung durchgeführt:
“MENÜ – System – Allgemein ->
- System “Miniaturansicht: x Aktiviert”
- Crawler “Dokumente entfernen nach: 15 Tag(en)” angegeben.
Wenn bekannt ist, welche Sprache die Dokumente hauptsächlich haben, die indiziert werden sollen, so ist es hilfreich, diese Infos dem Crawler mitzugeben. Das verhindert Probleme mit der Erkennung von Sonderzeichen.
Wer FESS in einer Firma betreibt sollt sich die Möglichkeiten der Anpassungen für das Layout und zur Einbindung eines Firmenlogos anschauen. Auch Single Sign On (SSO) ist möglich. Wichtig hierbei ist aber auch, dass die Einstellungen zum Datenschutz geprüft werden müssen bzw. mit der Mitarbeitervertretung/Betriebsrat/Datenschützer abgestimmt werden müssen. FESS loggt jede Suchanfrage mit um daraus Empfehlungen generieren zu können. Der Admin hat Zugriff auf diese Logdateien und kann die Zugriffe nachverfolgen.
Wie immer: Gerne Verbesserungen melden und auch gerne Eure Erfahrungen mit FESS hier teilen. Ich freue mich auf Euer Feedback.