Fessでクロールしてインデックスに保存されたドキュメントを、HTMLファイルとしてエクスポートする機能を追加しました。検索インデックスに格納されているテキスト情報をファイルとして取り出せるようになります。将来的にはJSON形式などへの対応も検討しています。
概要
新しいスケジュールジョブ IndexExportJob を追加しました。このジョブはOpenSearchのインデックスからドキュメントをスクロール検索で取得し、各ドキュメントをHTMLファイルとしてファイルシステムに書き出します。ドキュメントのURLのパス構造がそのままディレクトリ構造に反映されます。
設定
fess_config.properties に以下の設定項目が追加されています。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
index.export.path | /var/lib/fess/export | エクスポート先のベースディレクトリ |
index.export.exclude.fields | cache | エクスポートから除外するフィールド(カンマ区切り) |
index.export.scroll.size | 100 | スクロール検索のバッチサイズ |
エクスポートされるHTMLの構造
各ドキュメントは以下のような構造のHTMLファイルとして保存されます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ドキュメントのタイトル</title>
<meta name="fess:url" content="https://example.com/page">
<meta name="fess:host" content="example.com">
<meta name="fess:last_modified" content="2025-01-01T00:00:00">
<!-- その他のメタ情報 -->
</head>
<body>
ドキュメントのテキスト内容
</body>
</html>
title、content、lang はHTML要素として直接使用され、それ以外のフィールドは fess: プレフィックス付きのmetaタグとして出力されます。exclude.fields で指定したフィールド(デフォルトでは cache)はエクスポートから除外されます。
ファイルの保存先
ドキュメントのURLに基づいてディレクトリ構造が決定されます。
https://example.com/docs/guide.html→example.com/docs/guide.htmlhttps://example.com/docs/→example.com/docs/index.htmlhttps://example.com/docs/page→example.com/docs/page.html
パスコンポーネントに含まれるファイルシステムで使用できない文字はアンダースコアに置換されます。また、URLのパースに失敗した場合は _invalid/ ディレクトリにSHA-256ハッシュ名で保存されます。
使い方
管理画面のスケジューラーに「Index Exporter」ジョブが登録されています(デフォルトでは無効)。ジョブを有効にしてcron式を設定するか、手動で実行できます。
ジョブのスクリプトは以下の通りです。
return new org.codelibs.fess.job.IndexExportJob()
.query(org.opensearch.index.query.QueryBuilders.matchAllQuery())
.execute()
query() メソッドでエクスポート対象のドキュメントをフィルタリングすることもできます。
まとめ
この機能により、Fessのインデックスに保存されているドキュメント情報をHTMLファイルとして取り出すことができます。バックアップやデータ移行、他のシステムとの連携などに活用できます。