Descripción general
En Fess, puede implementar lógica personalizada usando scripts en diversos escenarios. Al aprovechar los scripts, puede controlar de manera flexible el procesamiento de datos durante el crawl, la transformación de URLs y la ejecución de trabajos programados.
Lenguajes de scripting compatibles
Fess soporta los siguientes lenguajes de scripting:
| Lenguaje | Identificador | Descripción |
|---|---|---|
| Groovy | groovy | Lenguaje de scripting registrado de forma predeterminada. Compatible con Java y proporciona funcionalidades potentes |
Nota
El único motor de scripting registrado de forma predeterminada en Fess es Groovy. El lenguaje de scripting por defecto es groovy ( Constants.DEFAULT_SCRIPT ). Todos los ejemplos de scripts de este documento están escritos en sintaxis Groovy.
Casos de uso del scripting
Configuración de data store
En los conectores de data store, se usan scripts para mapear los datos obtenidos a los campos del índice. La configuración se escribe en formato nombre_de_campo=expresion una línea por entrada, y cada línea se evalúa como una expresión Groovy independiente.
Los nombres de variables disponibles en los scripts de data store varían según el tipo de conector. Por ejemplo, en el data store CSV y en el data store JSON, cada nombre de columna o campo puede usarse directamente como variable (sin prefijo común como data). En los conectores de tipo archivo (Box, Google Drive, OneDrive, etc.) se usa el prefijo file.*, en Slack se usa message.*, y cada conector tiene su propio prefijo. Consulte la documentación de cada conector de data store para conocer las variables disponibles.
Nota
Cada línea de un data store se evalúa como una expresión única, por lo que no es posible usar bloques if de varias líneas, sentencias import ni declaraciones de variables con def. Para cambiar un valor según una condición, use el operador ternario por campo (por ejemplo: title=enabled == "true" ? name : null ). Para referenciar clases, escriba el nombre completamente cualificado (FQCN) en línea.
Mapeo de rutas
El mapeo de rutas es una función para normalizar y transformar las URLs a crawlear. De forma predeterminada, se configura mediante un par de «expresión regular» y «cadena de reemplazo», y no es un script Groovy. Por ejemplo, si se especifica http:// como expresión regular y https:// como cadena de reemplazo, se sustituye el esquema de la URL.
Solo cuando la cadena de reemplazo comienza con el prefijo groovy:, la cadena restante se evalúa como un script Groovy. Dentro de este script, se puede usar url para la cadena de URL a transformar y matcher para el java.util.regex.Matcher de la expresión regular.
Trabajos programados
En los trabajos programados, puede escribir lógica de procesamiento personalizada en scripts Groovy. El script completo se evalúa como un único script Groovy, por lo que es posible usar múltiples líneas, sentencias import y declaraciones de variables con def.
Los métodos como logLevel("info") son métodos de la clase del trabajo ( ExecJob y sus subclases) y pueden encadenarse. Consulte «Contexto de ejecución y objetos disponibles» para obtener información sobre la variable executor.
Sintaxis básica
A continuación se muestran ejemplos de sintaxis básica de Groovy. Los comentarios se escriben con // (comentario de línea) o /* */ (comentario de bloque). Tenga en cuenta que los comentarios que comienzan con # no son válidos en Groovy.
Acceso a variables
Operaciones de cadenas
Estructuras condicionales
Operaciones de fecha
Contexto de ejecución y objetos disponibles
Los objetos disponibles dentro de un script varían según el contexto en que se ejecuta. Solo container está disponible en todos los contextos.
| Contexto de ejecución | Objetos disponibles | Descripción |
|---|---|---|
| Todos los contextos | container | Contenedor DI. Acceso a componentes mediante |
| Script de data store | Variables de campo específicas del conector | Cada campo obtenido del data store está disponible como variable (los nombres de variable y prefijos varían según el conector; en CSV/JSON el nombre del campo se usa directamente como variable) |
| Mapeo de rutas | url matcher | La cadena de URL a transformar y el Matcher de la expresión regular (solo cuando se usa el prefijo groovy:) |
| Trabajos programados | executor | Instancia de ejecución del trabajo ( JobExecutor ). Se usa para controlar el apagado del trabajo |
Nota
Los objetos distintos de container solo se inyectan en contextos específicos. Por ejemplo, executor solo está disponible en trabajos programados y no puede usarse en scripts de data store ni en mapeo de rutas.
Seguridad
Advertencia
Los scripts tienen funcionalidades muy potentes; úselos únicamente desde fuentes de confianza.
Los scripts se ejecutan en el servidor
Es posible acceder al sistema de archivos y a la red
Asegúrese de que solo los usuarios con privilegios de administrador puedan editar scripts
La ejecución de scripts se registra en el log de auditoría (
audit.log). El registro puede controlarse conscript.audit.log.enabledy está activado por defecto (true). La longitud máxima de la cadena de script registrada se controla conscript.audit.log.max.lengthy el valor por defecto es100caracteres.
Rendimiento
Consejos para optimizar el rendimiento de los scripts:
Evitar procesamiento complejo: Los scripts de data store se ejecutan por cada documento
Minimizar el acceso a recursos externos: Las llamadas de red son una fuente de latencia
Aprovechar la cache: Considere usar cache para valores que se usan repetidamente
Depuración
En los scripts de trabajos programados, el script completo se evalúa como un único script Groovy, por lo que puede usar la salida de logs para depurar. (En los scripts de data store, cada línea se evalúa como una expresión individual, por lo que no es posible usar sentencias import ni procesamiento en varias líneas.)
El ejemplo anterior usa un logger denominado fess.script. Para que este log se emita, agregue la configuración del logger correspondiente en app/WEB-INF/classes/log4j2.xml.
Además, para activar los logs de depuración del propio motor de scripting, establezca el nivel de log del paquete org.codelibs.fess.script en DEBUG.
Información de referencia
Guía de scripting Groovy - Guía de scripting Groovy
Rastreo de Almacén de Datos - Guía de configuración de data store
Programador de Tareas - Guía de configuración del planificador