Fess Crawlerのエクストラクターにweight設定を追加

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値で柔軟に制御できるようになりました。カスタムエクストラクターを追加する際に、既存のエクストラクターとの優先順位を設定ファイルで簡単に調整できます。

コメントを残す

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