Fess Crawlerのエクストラクターにweightを指定できるようにしました。これにより、同じMIMEタイプに対して複数のエクストラクターが登録されている場合に、優先度を制御できるようになります。
背景
Fess Crawlerでは、ドキュメントからテキストを抽出するためにエクストラクター(Extractor)を利用しています。エクストラクターはMIMEタイプに基づいて選択されますが、同じMIMEタイプに対して複数のエクストラクターが存在する場合、どちらを優先するかを制御する仕組みがありませんでした。
変更内容
ExtractorインターフェースにgetWeight()メソッドをデフォルトメソッドとして定義し、AbstractExtractor基底クラスにweightフィールドを追加しました。
Extractorインターフェースでは、デフォルトのweightとして1を返すようになっています。
public interface Extractor {
ExtractData getText(InputStream in, Map<String, String> params);
default int getWeight() {
return 1;
}
}
AbstractExtractorでは、weightフィールドとsetter/getterを実装しています。
public abstract class AbstractExtractor implements Extractor {
protected int weight = 1;
@Override
public int getWeight() {
return weight;
}
public void setWeight(final int weight) {
this.weight = weight;
}
}
設定方法
Fessの設定ファイル(XML)で、エクストラクターのweightを指定できます。weightの値が大きいエクストラクターが優先的に使用されます。
<component name="tikaExtractor" class="org.codelibs.fess.crawler.extractor.impl.TikaExtractor">
<property name="weight">10</property>
</component>
デフォルトのweightは1なので、特に設定しなければ従来と同じ動作になります。
まとめ
この変更により、エクストラクターの優先度をweight値で柔軟に制御できるようになりました。カスタムエクストラクターを追加する際に、既存のエクストラクターとの優先順位を設定ファイルで簡単に調整できます。