概要
インデックスエクスポート機能は、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日の午前0時に実行
カスタムクエリフィルタリング
ジョブスクリプトを変更することで、特定のドキュメントのみをエクスポートするようにカスタマイズできます。
カスタムクエリフィルタを追加するには:
システム > スケジューラ に移動
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 のポリシーがアクセスを許可しているか確認