概述
Groovy是 Fess 的默认脚本语言。 它运行在Java虚拟机(JVM)上,与Java高度兼容, 同时可以使用更简洁的语法编写脚本。
基本语法
变量声明
字符串操作
集合操作
条件分支
循环处理
数据存储脚本
数据存储设置中的脚本示例。
Note
在数据存储脚本中,每行 字段名=表达式 均作为独立的单一表达式求值。 因此,不能使用 import 语句、跨多行的 def 变量声明,以及一次性设置多个字段的多行控制结构(如 if 块)。 使用Java类时,请以完全限定类名(FQCN)写成单一表达式,条件分支则在各字段中使用三元运算符(例如: url=data.published ? data.url : null )。 此外,这里使用的变量名 data 仅为示例,实际变量名取决于所使用的数据存储连接器。详情请参阅 数据存储爬取 。
基本映射
URL生成
内容加工
日期处理
可用对象
脚本中可用的对象因执行上下文而异。
| 上下文 | 对象 | 说明 |
|---|---|---|
| 所有上下文 | container | DI容器。通过 container.getComponent("...") 访问组件 |
| 计划任务 | executor | 任务执行控制( JobExecutor )。任务停止支持所必需 |
| 数据存储 | (连接器特定) | 各数据存储提供的数据记录变量。变量名取决于连接器 |
| 路径映射 | url , matcher | 待转换的URL字符串及正则表达式匹配结果( Matcher )。可在带 groovy: 前缀的替换设置中使用 |
| 文档权重 | (文档字段) | 目标文档的各字段均可作为变量使用(用于条件表达式和权重值表达式) |
计划任务脚本
计划任务中使用的Groovy脚本示例。 在计划任务中,container 和 executor 可用。 将 executor 传递给任务的 execute() 方法可启用任务停止控制。
Note
计划任务脚本作为一个完整的Groovy脚本整体求值。 因此,与数据存储脚本不同,可以使用 import 语句、多行的 def 声明及多行控制结构。 以下「使用Java类」「访问Fess组件」「错误处理」「调试与日志输出」的示例均基于此完整脚本的上下文。
执行爬取任务
条件爬取
顺序执行多个任务
使用Java类
在Groovy脚本中,可以使用Java标准库和Fess的类。
日期与时间
文件操作
HTTP通信
Warning
访问外部资源会影响性能, 请将其控制在最小限度。
访问Fess组件
可以使用 container 访问Fess的组件。
系统帮助器
获取配置值
执行搜索
错误处理
import 语句必须放在脚本顶部(不能放在 try-catch 等块内部)。 可以使用 try-catch 捕获异常,控制任务的错误行为。
调试与日志输出
日志输出
调试输出
最佳实践
保持简单: 避免复杂逻辑,编写易读的代码
null检查: 活用
?.运算符和?:运算符异常处理: 使用适当的try-catch处理意外错误
日志输出: 输出日志以便于调试
性能: 最小化外部资源访问