概要
インデックスエクスポート機能は、OpenSearch にインデックスされた検索ドキュメントを HTML または JSON ファイルとしてローカルファイルシステムにエクスポートします。この機能は以下の用途に便利です。
インデックスされたコンテンツの静的バックアップ作成
アーカイブ目的でのドキュメントのオフラインコピー生成
静的検索結果ページの構築
他システムへのコンテンツ移行
エクスポートされたファイルは、ソースドキュメントの元の URL パス構造を維持するため、エクスポートされたコンテンツの管理が容易です。
動作の仕組み
インデックスエクスポートジョブが実行されると、以下の処理が行われます。
ドキュメント取得: スクロール API を使用して OpenSearch からドキュメントを効率的にバッチ取得
コンテンツ処理: ドキュメントのフィールド(タイトル、コンテンツ、URL など)を抽出し、除外対象フィールドを取り除く
ディレクトリ構造作成: ドキュメントの
urlフィールドに基づいてエクスポートディレクトリに URL パス構造を再現ファイル生成: ドキュメントのコンテンツを含むファイル(HTML または JSON)を作成
完了まで継続: インデックスが完全にエクスポートされるまでバッチ処理を継続
スクロール API により、メモリの問題なく大量のドキュメントセットを効率的に処理できます。
注釈
エクスポート対象となるのは検索インデックス(fess.search)のドキュメントです。url フィールドを持たないドキュメントはスキップされます。
設定プロパティ
fess_config.properties でインデックスエクスポート機能を設定します。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
index.export.path | /var/lib/fess/export | エクスポートファイルを保存するディレクトリ |
index.export.exclude.fields | cache | エクスポートから除外するフィールド(カンマ区切り) |
index.export.scroll.size | 100 | バッチあたりの処理ドキュメント数 |
index.export.format | html | エクスポートファイルのフォーマット(html または json) |
設定例:
ジョブの有効化
インデックスエクスポートジョブはスケジュールジョブとして登録されていますが、デフォルトでは無効です。
ジョブを有効にするには:
Fess 管理コンソールにログイン
システム > スケジューラ に移動
ジョブ一覧から Index Exporter を探す
クリックしてジョブ設定を編集
cron 式でスケジュールを設定
設定を保存
cron 式の例:
0 0 2 * * ?- 毎日午前2時に実行0 0 3 ? * SUN- 毎週日曜日の午前3時に実行0 0 0 1 * ?- 毎月1日の午前0時に実行
カスタムクエリフィルタリング
ジョブスクリプトを変更することで、特定のドキュメントのみをエクスポートするようにカスタマイズできます。
Index Exporter ジョブのデフォルトスクリプトは、すべてのドキュメントをエクスポートします:
カスタムクエリフィルタを追加するには:
システム > スケジューラ に移動
Index Exporter を編集
ジョブスクリプトを変更してクエリフィルタを追加
日付フィルタの例(直近7日間のドキュメントのみエクスポート):
サイトフィルタの例(特定サイトのドキュメントのみエクスポート):
JSON フォーマットでエクスポートする例:
エクスポートされたファイル構造
エクスポートされたファイルは、元の URL 構造を反映して整理されます。
例えば、URL が https://example.com/docs/guide/intro.html のドキュメントは以下のようにエクスポートされます:
ファイルパスは、ドキュメントの url フィールドから以下のルールで決定されます:
ホスト名がトップレベルのディレクトリになります。URL にホスト名が含まれない場合は
_localが使用されます。パスがスラッシュで終わる場合やパスを持たない場合は、インデックスファイル(
index.htmlまたはindex.json)が作成されます。パスにファイル拡張子が含まれない場合は、フォーマットに応じた拡張子(
.htmlまたは.json)が付加されます。ファイル名に使用できない文字(
< > : " | ? * \)は_に置換され、各パス構成要素は最大200文字に切り詰められます。URL を解析できない場合やパストラバーサルが検出された場合は、
_invalidディレクトリに URL のハッシュ値をファイル名として保存されます。
HTML フォーマットの場合、各ファイルは以下の構造で生成されます:
titleフィールド →<title>要素langフィールド →<html>要素のlang属性contentフィールド →<body>要素の本文その他の除外されていないフィールド →
<head>内の<meta name="fess:フィールド名" content="値">タグ
JSON フォーマットの場合、各ファイルは除外されていない全フィールドを含む JSON オブジェクトになります:
ベストプラクティス
ストレージの考慮事項
エクスポートディレクトリに十分なディスク容量を確保
大量のドキュメントセットには専用ストレージの使用を検討
定期エクスポートを実行する場合は古いエクスポートの定期的なクリーンアップを実装
パフォーマンスのヒント
ドキュメントサイズに応じて
index.export.scroll.sizeを調整: - 小さいドキュメント: 大きなバッチサイズ(200-500) - 大きいドキュメント: 小さなバッチサイズ(50-100)利用が少ない時間帯にエクスポートをスケジュール
エクスポート操作中はディスク I/O を監視
セキュリティの推奨事項
エクスポートディレクトリに適切なファイルパーミッションを設定
エクスポートディレクトリを Web に直接公開しない
機密情報を含むコンテンツはエクスポート後の暗号化を検討
エクスポートファイルへのアクセスを定期的に監査
トラブルシューティング
エクスポートジョブが実行されない
スケジューラでジョブが有効になっているか確認
cron 式の構文を確認
Fess ログでエラーメッセージを確認:
エクスポートディレクトリが空
インデックスにドキュメントが存在することを確認
エクスポートパスのパーミッションを確認
クエリフィルタ(カスタム設定の場合)がドキュメントにマッチするか確認
エクスポートが途中で失敗する
利用可能なディスク容量を確認
メモリやタイムアウトのエラーがないかログを確認
大きなドキュメントの場合は
scroll.sizeを小さくすることを検討OpenSearch のスクロールコンテキストのタイムアウト設定を確認
ファイルにアクセスできない
ファイルパーミッションを確認:
ls -la /var/lib/fess/exportディレクトリの所有者が Fess プロセスユーザーと一致するか確認
SELinux や AppArmor のポリシーがアクセスを許可しているか確認