Übersicht
Fess ermöglicht es, in verschiedenen Situationen benutzerdefinierte Logik mithilfe von Skripten zu implementieren. Durch den Einsatz von Skripten lassen sich Datenverarbeitung beim Crawling, URL-Transformationen und die Ausführung geplanter Aufgaben flexibel steuern.
Unterstützte Skriptsprachen
Fess unterstützt die folgenden Skriptsprachen:
| Sprache | Bezeichner | Beschreibung |
|---|---|---|
| Groovy | groovy | Die standardmäßig registrierte Skriptsprache. Java-kompatibel mit leistungsstarken Funktionen |
Bemerkung
Das einzige standardmäßig in Fess registrierte Skript-Engine ist Groovy. Die Standardskriptsprache ist groovy (Constants.DEFAULT_SCRIPT). Alle Skriptbeispiele in dieser Dokumentation sind in Groovy-Syntax verfasst.
Anwendungsfälle für Skripte
Datenspeicher-Konfiguration
Datenspeicher-Konnektoren verwenden Skripte, um abgerufene Daten auf Indexfelder abzubilden. Die Konfiguration wird im Format Feldname=Ausdruck zeilenweise angegeben; jede Zeile wird als eigenständiger Groovy-Ausdruck ausgewertet.
Die im Datenspeicher-Skript verfügbaren Variablennamen hängen vom jeweiligen Konnektor ab. Bei CSV- und JSON-Datenspeichern sind die Spalten- bzw. Feldnamen direkt als Variablen verfügbar (es wird kein gemeinsames Präfix wie data vorangestellt). Bei dateibasierten Konnektoren (Box, Google Drive, OneDrive usw.) lautet das Präfix file.*, bei Slack message.* — das Präfix variiert je nach Konnektor. Details zu den verfügbaren Variablen entnehmen Sie bitte der Dokumentation des jeweiligen Datenspeicher-Konnektors.
Bemerkung
Da jede Zeile eines Datenspeicher-Skripts als einzelner Ausdruck ausgewertet wird, sind mehrzeilige if-Blöcke, import-Anweisungen und def-Variablendeklarationen nicht zulässig. Für wertabhängige Felder verwenden Sie den ternären Operator (z. B. title=enabled == "true" ? name : null). Klassen werden über ihren vollständig qualifizierten Namen (FQCN) inline referenziert.
Pfad-Mapping
Pfad-Mapping dient zur Normalisierung und Transformation von Crawling-URLs. Standardmäßig wird es als Paar aus „Regulärem Ausdruck“ und „Ersetzungszeichenkette“ konfiguriert — dies ist kein Groovy-Skript. Beispielsweise ersetzt der reguläre Ausdruck http:// mit der Ersetzungszeichenkette https:// das URL-Schema.
Nur wenn der Ersetzungszeichenkette das Präfix groovy: vorangestellt wird, wird der nachfolgende Teil als Groovy-Skript ausgewertet. In diesem Skript stehen url (die zu transformierende URL-Zeichenkette) und matcher (der java.util.regex.Matcher des regulären Ausdrucks) zur Verfügung.
Geplante Aufgaben
Bei geplanten Aufgaben kann benutzerdefinierte Verarbeitungslogik als Groovy-Skript verfasst werden. Das gesamte Skript wird als ein einziges Groovy-Skript ausgewertet, sodass mehrzeilige Anweisungen, import-Anweisungen und def-Variablendeklarationen verwendet werden können.
Methoden wie logLevel("info") gehören zur Job-Klasse (ExecJob und deren Unterklassen) und können per Method-Chaining aufgerufen werden. Informationen zur executor-Variablen finden Sie im Abschnitt „Ausführungskontext und verfügbare Objekte“.
Grundlegende Syntax
Im Folgenden finden Sie grundlegende Groovy-Syntaxbeispiele. Kommentare werden mit // (Zeilenkommentar) oder /* */ (Blockkommentar) angegeben. Beachten Sie, dass Kommentare mit # in Groovy nicht verwendet werden können.
Variablenzugriff
Zeichenkettenoperationen
Bedingte Verzweigung
Datumsoperationen
Ausführungskontext und verfügbare Objekte
Die in einem Skript verfügbaren Objekte hängen vom jeweiligen Ausführungskontext ab. Nur container ist in allen Kontexten verfügbar.
| Ausführungskontext | Verfügbare Objekte | Beschreibung |
|---|---|---|
| Alle Kontexte | container | DI-Container. Zugriff auf einzelne Komponenten über |
| Datenspeicher-Skript | Konnektor-spezifische Feldvariablen | Die vom Datenspeicher abgerufenen Felder stehen als Variablen zur Verfügung (Variablennamen und Präfixe variieren je nach Konnektor; bei CSV/JSON werden Feldnamen direkt als Variablen verwendet) |
| Pfad-Mapping | url matcher | Die zu transformierende URL-Zeichenkette und der |
| Geplante Aufgaben | executor | Job-Ausführungsinstanz (JobExecutor). Wird zur Steuerung des Job-Shutdowns verwendet |
Bemerkung
Andere Objekte als container werden nur in bestimmten Kontexten injiziert. Beispielsweise ist executor ausschließlich in geplanten Aufgaben verfügbar und steht in Datenspeicher-Skripten oder beim Pfad-Mapping nicht zur Verfügung.
Sicherheit
Warnung
Skripte besitzen weitreichende Fähigkeiten — verwenden Sie sie daher ausschließlich aus vertrauenswürdigen Quellen.
Skripte werden auf dem Server ausgeführt
Zugriff auf das Dateisystem und Netzwerk ist möglich
Stellen Sie sicher, dass nur Benutzer mit Administratorrechten Skripte bearbeiten können
Die Skriptausführung wird im Audit-Log (
audit.log) protokolliert. Die Protokollierung wird überscript.audit.log.enabledgesteuert; der Standardwert isttrue. Die maximale Länge der protokollierten Skriptzeichenkette wird überscript.audit.log.max.lengthgesteuert; der Standardwert beträgt100Zeichen.
Leistung
Hinweise zur Optimierung der Skript-Leistung:
Komplexe Verarbeitung vermeiden: Datenspeicher-Skripte werden für jedes Dokument ausgeführt
Zugriff auf externe Ressourcen minimieren: Netzwerkaufrufe verursachen Verzögerungen
Caching nutzen: Erwägen Sie das Zwischenspeichern von wiederholt verwendeten Werten
Debugging
Da Skripte für geplante Aufgaben als ein einziges Groovy-Skript ausgewertet werden, können Protokollausgaben zum Debugging eingesetzt werden. (Datenspeicher-Skripte werden zeilenweise als einzelne Ausdrücke ausgewertet, daher sind import-Anweisungen und mehrzeilige Verarbeitungslogik dort nicht möglich.)
Das obige Beispiel verwendet einen Logger mit dem Namen fess.script. Um diese Protokollausgabe zu aktivieren, fügen Sie die entsprechende Logger-Konfiguration in app/WEB-INF/classes/log4j2.xml ein.
Um Debug-Protokolle der Skript-Engine selbst zu aktivieren, setzen Sie den Protokolllevel des Pakets org.codelibs.fess.script auf DEBUG.
Referenzinformationen
Groovy-Skripting-Leitfaden - Groovy-Skripting-Leitfaden
Datenspeicher-Crawl - Datenspeicher-Konfigurationsleitfaden
Scheduler - Scheduler-Konfigurationsleitfaden