Fessの検索結果をCSV・JSONでエクスポートする

Fessの検索結果をCSVまたはJSONファイルとしてダウンロードできる機能を追加しました。検索で絞り込んだ文書の一覧を表計算ソフトに取り込んだり、別のツールで加工したりする用途に使えます。管理画面の検索ログ出力とは別の、検索利用者向けの機能です。

エクスポートを有効にする

デフォルトでは無効です。fess_config.propertiesで有効にし、必要に応じて件数や出力項目を調整します。

api.search.export=true
api.search.export.max.size=1000
api.search.export.fields=title,url_link,last_modified,content_length,filetype
api.search.export.rate.limit.per.minute=10

標準のbootstrapテーマでは、機能を有効にすると検索結果の状態表示の横にCSV・JSONのエクスポートメニューが表示されます。現在の検索条件を引き継ぎ、画面のページング条件は引き継ぎません。

APIからダウンロードする

エンドポイントはGET /api/v2/documents/exportです。formatはcsvまたはjsonで、省略するとCSVになります。通常の検索APIと同様に、q、ex_q、fields.*、sortなどを指定できます。

curl --get 'http://localhost:8080/api/v2/documents/export' \
  --data-urlencode 'q=運用手順' \
  --data-urlencode 'format=csv' \
  --output search-results.csv

これはログイン不要の環境での例です。ログイン必須の環境では、検索APIと同様にセッションやアクセストークンなど、環境に合った認証が必要になります。

エクスポートは内部で検索結果を順に取得します。numは無視され、ファイルに書き出す件数はapi.search.export.max.sizeで制限します。標準の上限は1000件です。

出力形式と閲覧権限

CSVはcsv.file.encodingの文字コードを使い、UTF-8ではBOMを付けます。複数値のフィールドは空白で連結し、数式として評価される文字で始まる値には引用符を付けて保護します。

JSONは{"data":[...]}形式で、複数値は配列のまま出力します。出力フィールドを追加しても、APIレスポンスで許可されていないフィールドは書き出しません。

文書の閲覧権限は通常の検索と同じロールフィルターで確認します。エクスポートを有効にしても、検索で閲覧できない文書まで取得できるようにはなりません。

運用上の制限

標準ではユーザーごとに1分あたり10回まで、ゲストはクライアントIPごとに制限します。超過時はHTTP 429とRetry-Afterを返します。

出力件数が多い場合は上限を確認してください。また、ダウンロード開始後に取得処理が失敗するとファイルが途中で終了する可能性があります。取得した件数を確認してから集計に利用すると安心です。エクスポート自体は検索ログには記録しません。

関連PR

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です