インデックスエクスポート機能

概要

インデックスエクスポート機能は、OpenSearch にインデックスされた検索ドキュメントを HTML ファイルとしてローカルファイルシステムにエクスポートします。この機能は以下の用途に便利です。

  • インデックスされたコンテンツの静的バックアップ作成

  • アーカイブ目的でのドキュメントのオフラインコピー生成

  • 静的検索結果ページの構築

  • 他システムへのコンテンツ移行

エクスポートされたファイルは、ソースドキュメントの元の URL パス構造を維持するため、エクスポートされたコンテンツの管理が容易です。

動作の仕組み

インデックスエクスポートジョブが実行されると、以下の処理が行われます。

  1. ドキュメント取得: スクロール API を使用して OpenSearch からドキュメントを効率的にバッチ取得

  2. コンテンツ処理: ドキュメントのフィールド(タイトル、コンテンツ、URL など)を抽出

  3. ディレクトリ構造作成: エクスポートディレクトリに URL パス構造を再現

  4. HTML ファイル生成: ドキュメントのコンテンツを含む HTML ファイルを作成

  5. 完了まで継続: インデックスが完全にエクスポートされるまでバッチ処理を継続

スクロール 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

ジョブの有効化

インデックスエクスポートジョブはスケジュールジョブとして登録されていますが、デフォルトでは無効です。

ジョブを有効にするには:

  1. Fess 管理コンソールにログイン

  2. システム > スケジューラ に移動

  3. ジョブ一覧から Index Export Job を探す

  4. クリックしてジョブ設定を編集

  5. cron 式でスケジュールを設定

  6. 設定を保存

cron 式の例:

  • 0 0 2 * * ? - 毎日午前2時に実行

  • 0 0 3 ? * SUN - 毎週日曜日の午前3時に実行

  • 0 0 0 1 * ? - 毎月1日の午前0時に実行

カスタムクエリフィルタリング

ジョブスクリプトを変更することで、特定のドキュメントのみをエクスポートするようにカスタマイズできます。

カスタムクエリフィルタを追加するには:

  1. システム > スケジューラ に移動

  2. Index Export Job を編集

  3. ジョブスクリプトを変更してクエリフィルタを追加

日付フィルタの例:

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 に直接公開しない

  • 機密情報を含むコンテンツはエクスポート後の暗号化を検討

  • エクスポートファイルへのアクセスを定期的に監査

トラブルシューティング

エクスポートジョブが実行されない

  1. スケジューラでジョブが有効になっているか確認

  2. cron 式の構文を確認

  3. Fess ログでエラーメッセージを確認:

tail -f /var/log/fess/fess.log | grep IndexExport

エクスポートディレクトリが空

  1. インデックスにドキュメントが存在することを確認

  2. エクスポートパスのパーミッションを確認

  3. クエリフィルタ(カスタム設定の場合)がドキュメントにマッチするか確認

# インデックスのドキュメント数を確認
curl -X GET "localhost:9201/fess.YYYYMMDD/_count?pretty"

エクスポートが途中で失敗する

  1. 利用可能なディスク容量を確認

  2. メモリやタイムアウトのエラーがないかログを確認

  3. 大きなドキュメントの場合は scroll.size を小さくすることを検討

  4. OpenSearch のスクロールコンテキストのタイムアウト設定を確認

ファイルにアクセスできない

  1. ファイルパーミッションを確認: ls -la /var/fess/export

  2. ディレクトリの所有者が Fess プロセスユーザーと一致するか確認

  3. SELinux や AppArmor のポリシーがアクセスを許可しているか確認

関連トピック