Descripcion general
En Fess, puede implementar logica personalizada usando scripts en diversos escenarios. Al aprovechar los scripts, puede controlar de manera flexible el procesamiento de datos durante el crawl, la transformacion de URLs y la ejecucion de trabajos programados.
Lenguajes de scripting compatibles
Fess soporta los siguientes lenguajes de scripting:
| Lenguaje | Identificador | Descripcion |
|---|---|---|
| Groovy | groovy | Lenguaje de scripting registrado de forma predeterminada. Compatible con Java y proporciona funcionalidades potentes |
Nota
El unico 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 estan escritos en sintaxis Groovy.
Casos de uso del scripting
Configuracion de data store
En los conectores de data store, se usan scripts para mapear los datos obtenidos a los campos del indice. La configuracion se escribe en formato nombre_de_campo=expresion una linea por entrada, y cada linea se evalua como una expresion Groovy independiente.
Los nombres de variables disponibles en los scripts de data store varian segun 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 comun 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 documentacion de cada conector de data store para conocer las variables disponibles.
Nota
Cada linea de un data store se evalua como una expresion unica, por lo que no es posible usar bloques if de varias lineas, sentencias import ni declaraciones de variables con def. Para cambiar un valor segun una condicion, use el operador ternario por campo (por ejemplo: title=enabled == "true" ? name : null ). Para referenciar clases, escriba el nombre completamente cualificado (FQCN) en linea.
Mapeo de rutas
El mapeo de rutas es una funcion para normalizar y transformar las URLs a crawlear. De forma predeterminada, se configura mediante un par de «expresion regular» y «cadena de reemplazo», y no es un script Groovy. Por ejemplo, si se especifica http:// como expresion 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 evalua 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 expresion regular.
Trabajos programados
En los trabajos programados, puede escribir logica de procesamiento personalizada en scripts Groovy. El script completo se evalua como un unico script Groovy, por lo que es posible usar multiples lineas, sentencias import y declaraciones de variables con def.
Los metodos como logLevel("info") son metodos de la clase del trabajo ( ExecJob y sus subclases) y pueden encadenarse. Consulte «Contexto de ejecucion y objetos disponibles» para obtener informacion sobre la variable executor.
Sintaxis basica
A continuacion se muestran ejemplos de sintaxis basica de Groovy. Los comentarios se escriben con // (comentario de linea) o /* */ (comentario de bloque). Tenga en cuenta que los comentarios que comienzan con # no son validos en Groovy.
Acceso a variables
Operaciones de cadenas
Estructuras condicionales
Operaciones de fecha
Contexto de ejecucion y objetos disponibles
Los objetos disponibles dentro de un script varian segun el contexto en que se ejecuta. Solo container esta disponible en todos los contextos.
| Contexto de ejecucion | Objetos disponibles | Descripcion |
|---|---|---|
| Todos los contextos | container | Contenedor DI. Acceso a componentes mediante |
| Script de data store | Variables de campo especificas del conector | Cada campo obtenido del data store esta disponible como variable (los nombres de variable y prefijos varian segun 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 expresion regular (solo cuando se usa el prefijo groovy:) |
| Trabajos programados | executor | Instancia de ejecucion del trabajo ( JobExecutor ). Se usa para controlar el apagado del trabajo |
Nota
Los objetos distintos de container solo se inyectan en contextos especificos. Por ejemplo, executor solo esta 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; uselos unicamente desde fuentes de confianza.
Los scripts se ejecutan en el servidor
Es posible acceder al sistema de archivos y a la red
Asegurese de que solo los usuarios con privilegios de administrador puedan editar scripts
La ejecucion de scripts se registra en el log de auditoria (
audit.log). El registro puede controlarse conscript.audit.log.enabledy esta activado por defecto (true). La longitud maxima 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
Depuracion
En los scripts de trabajos programados, el script completo se evalua como un unico script Groovy, por lo que puede usar la salida de logs para depurar. (En los scripts de data store, cada linea se evalua como una expresion individual, por lo que no es posible usar sentencias import ni procesamiento en varias lineas.)
El ejemplo anterior usa un logger denominado fess.script. Para que este log se emita, agregue la configuracion del logger correspondiente en app/WEB-INF/classes/log4j2.xml.
Ademas, para activar los logs de depuracion del propio motor de scripting, establezca el nivel de log del paquete org.codelibs.fess.script en DEBUG.
Informacion de referencia
Guia de scripting Groovy - Guia de scripting Groovy
Rastreo de Almacén de Datos - Guia de configuracion de data store
Programador de Tareas - Guia de configuracion del planificador