概述
索引导出功能允许您将 OpenSearch 中索引的搜索文档导出为本地文件系统上的 HTML 文件。此功能适用于以下场景:
创建索引内容的静态备份
生成文档的离线副本用于存档
构建静态搜索结果页面
将内容迁移到其他系统
导出的文件保持源文档的原始 URL 路径结构,便于浏览和管理导出的内容。
工作原理
索引导出作业运行时,执行以下流程:
查询文档:使用滚动 API 从 OpenSearch 检索文档,实现高效批处理
处理内容:提取文档字段(标题、内容、URL 等)
创建目录结构:在导出目录中复制 URL 路径结构
生成 HTML 文件:创建包含文档内容的 HTML 文件
持续直到完成:批量处理所有文档直到索引完全导出
滚动 API 确保高效处理大型文档集而不会出现内存问题。
配置属性
在 fess_config.properties 中配置索引导出功能:
| 属性 | 默认值 | 说明 |
|---|---|---|
index.export.path | /var/fess/export | 导出文件存储目录 |
index.export.exclude.fields | cache | 要排除的字段列表(逗号分隔) |
index.export.scroll.size | 100 | 每批处理的文档数 |
配置示例:
index.export.path=/data/fess/export
index.export.exclude.fields=cache,boost,role
index.export.scroll.size=200
启用作业
索引导出作业已注册为计划作业,但默认处于禁用状态。
启用作业的步骤:
登录 Fess 管理控制台
导航至 系统 > 调度器
在作业列表中找到 Index Export Job
点击编辑作业设置
使用 cron 表达式设置计划
保存设置
cron 表达式示例:
0 0 2 * * ?- 每天凌晨2点运行0 0 3 ? * SUN- 每周日凌晨3点运行0 0 0 1 * ?- 每月1日午夜运行
自定义查询过滤
您可以通过修改作业脚本来自定义导出作业,仅导出特定文档。
添加自定义查询过滤器:
导航至 系统 > 调度器
编辑 Index Export Job
修改作业脚本以包含查询过滤器
带日期过滤器的脚本示例:
import org.codelibs.fess.exec.IndexExportJob
def job = new IndexExportJob()
job.query = "created:>=now-7d"
job.execute()
带站点过滤器的脚本示例:
import org.codelibs.fess.exec.IndexExportJob
def job = new IndexExportJob()
job.query = "url:*example.com*"
job.execute()
导出文件结构
导出的文件按原始 URL 结构组织。
例如,URL 为 https://example.com/docs/guide/intro.html 的文档将导出到:
/var/fess/export/
└── example.com/
└── docs/
└── guide/
└── intro.html
每个导出的 HTML 文件包含:
文档标题
主要内容正文
元数据(最后修改日期、内容类型等)
原始 URL 引用
最佳实践
存储注意事项
确保导出目录有足够的磁盘空间
对于大型文档集,考虑使用专用存储
如果运行定期导出,实施旧导出的定期清理
性能提示
根据文档大小调整
index.export.scroll.size: - 较小文档:较大的批处理大小(200-500) - 较大文档:较小的批处理大小(50-100)在低使用率时段安排导出
监控导出操作期间的磁盘 I/O
安全建议
为导出目录设置适当的文件权限
不要将导出目录直接暴露给 Web
如果包含敏感信息,考虑加密导出内容
定期审计对导出文件的访问
故障排除
导出作业未运行
验证作业在调度器中已启用
检查 cron 表达式语法
查看 Fess 日志中的错误消息:
tail -f /var/log/fess/fess.log | grep IndexExport
导出目录为空
确认索引中存在文档
检查导出路径权限
验证查询过滤器(如果自定义)是否匹配文档
# 检查索引文档数
curl -X GET "localhost:9201/fess.YYYYMMDD/_count?pretty"
导出中途失败
检查可用磁盘空间
查看日志中的内存或超时错误
对于大型文档,考虑减小
scroll.size检查 OpenSearch 滚动上下文超时设置
文件无法访问
验证文件权限:
ls -la /var/fess/export检查目录所有者是否与 Fess 进程用户匹配
确认 SELinux 或 AppArmor 策略允许访问