Fessのクロール時のMIMEタイプ判定は、Apache Tikaを使ったコンテンツベースの検出を行っています。しかし、ファイルの内容によっては誤判定されるケースがあります。例えば、REMコメントで始まるSQLファイルがWindowsバッチファイル(application/x-bat)として検出されてしまうことがあります。この問題に対応するため、Fess 15.5でfess_config.propertiesに拡張子ベースのMIMEタイプ上書き設定を追加しました。
背景
Tikaによるコンテンツベースの検出は多くの場合正確ですが、ファイルの内容が別のファイル形式と類似している場合に誤判定が発生することがあります。特にSQLファイルでは、Oracle Database用のスクリプトがREM(remark)コメントで始まることが多く、これがWindowsバッチファイルのコマンドと同じキーワードであるため、application/x-batとして誤検出されます。
このような場合、拡張子ベースでMIMEタイプを指定できれば、コンテンツベースの検出結果を上書きして正しいMIMEタイプを設定できます。
設定方法
fess_config.propertiesに以下の設定を追加します。
# 拡張子に基づくMIMEタイプの上書き設定(1行に1つ: .拡張子=MIMEタイプ)
crawler.document.mimetype.extension.overrides=\
.sql=text/x-sql\n\
.plsql=text/x-plsql
各行は.拡張子=MIMEタイプの形式で指定し、改行文字(\n)で区切ります。この設定で指定された拡張子のファイルは、コンテンツベースの判定結果よりも拡張子ベースの設定が優先されます。
動作の仕組み
新しく追加されたFessMimeTypeHelperクラスが、従来のMimeTypeHelperImplを拡張しています。初期化時にfess_config.propertiesから設定を読み込み、拡張子とMIMEタイプのマッピングを構築します。
ファイルのMIMEタイプを判定する際の動作は以下の通りです。
- ファイル名から拡張子を取得(大文字・小文字は区別しない)
- 拡張子が上書き設定に含まれている場合、設定されたMIMEタイプを返す
- 含まれていない場合、従来通りコンテンツベースの検出を行う
設定の記述ルール
- 1行に1つのマッピングを記述する(
\nで区切り) - 形式:
.拡張子=MIMEタイプ - 拡張子の大文字・小文字は区別されない(
.sqlと.SQLは同じ扱い) - 前後の空白は自動的にトリミングされる
- 不正な形式の行(
=を含まない行)は無視される - 空行は無視される
- デフォルトは空文字列(上書きなし、従来の動作を維持)
設定例
SQLファイルの誤判定を修正する場合:
crawler.document.mimetype.extension.overrides=.sql=text/x-sql
複数の拡張子を設定する場合:
crawler.document.mimetype.extension.overrides=\
.sql=text/x-sql\n\
.plsql=text/x-plsql\n\
.pls=text/x-plsql
注意事項
- この機能はFess 15.5以降で利用可能です
- デフォルトでは上書き設定は空のため、従来の動作と変わりません
- 拡張子の上書き設定はコンテンツベースの判定より優先されます
- パスを含むファイル名(
/path/to/file.sql)でも拡張子は正しく認識されます