はじめに
Fess は標準で多くのデータソースに対応していますが、企業固有のシステムやデータ形式に対応するには、プラグインによる拡張が必要になる場合があります。
本記事では、Fess のプラグインアーキテクチャを解説し、カスタムデータソースプラグインと Ingest プラグインの実装方法を紹介します。
対象読者
Fess を独自のデータソースに対応させたい方
プラグイン開発に興味がある Java 開発者
Fess の内部アーキテクチャを理解したい方
プラグインアーキテクチャ
Fess のプラグインは、以下の種類があります。
| 種類 | 役割 | 例 |
|---|---|---|
| データストア (fess-ds-*) | 外部データソースからデータを取得 | Slack、Salesforce、DB |
| Ingest (fess-ingest-*) | クロールデータの加工・変換 | Example |
| テーマ (fess-theme-*) | 検索画面のデザイン | Simple、Code Search |
| スクリプト (fess-script-*) | スクリプト言語のサポート | OGNL |
| Web アプリ (fess-webapp-*) | Web アプリケーション拡張 | MCP サーバー |
プラグインの配置
プラグインは JAR ファイルとして提供され、Fess のプラグインディレクトリに配置されます。 管理画面の [システム] > [プラグイン] からインストール・管理できます。
カスタムデータソースプラグインの開発
社内に独自の文書管理システムがある場合を想定して、データソースプラグインの開発手順を解説します。
プロジェクト構成
既存のデータストアプラグイン(例: fess-ds-git)を参考に、Maven プロジェクトを作成します。
fess-ds-custom/
├── pom.xml
└── src/
└── main/
└── java/
└── org/codelibs/fess/ds/custom/
└── CustomDataStore.java
pom.xml の設定
fess-parent を親 POM として指定し、必要な依存関係を設定します。
<parent>
<groupId>org.codelibs.fess</groupId>
<artifactId>fess-parent</artifactId>
<version>15.5.0</version>
</parent>
<artifactId>fess-ds-custom</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.codelibs.fess</groupId>
<artifactId>fess</artifactId>
<version>${fess.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
データストアクラスの実装
データストアプラグインの中核は、データの取得と Fess へのドキュメント登録を行うクラスです。
実装のポイントは以下の通りです。
外部システムへの接続と認証
データの取得(API 呼び出し、ファイル読み取りなど)
取得したデータを Fess のドキュメント形式に変換
ドキュメントの登録
フィールドマッピング
取得したデータを Fess のフィールドにマッピングします。 主要なフィールドは以下の通りです。
title: ドキュメントのタイトルurl: ドキュメントの URL(検索結果のリンク先)content: ドキュメントの本文(検索対象)mimetype: MIME タイプlast_modified: 最終更新日時
ビルドとデプロイ
$ mvn clean package
生成された JAR ファイルを Fess のプラグインディレクトリに配置し、Fess を再起動します。
Ingest プラグインの開発
Ingest プラグインは、クロールで取得したドキュメントをインデックスに登録する前に加工・変換する仕組みです。
ユースケース
クロールしたドキュメントに追加フィールドを付与
本文テキストのクレンジング(不要な文字の除去)
外部 API を使った情報の付加(翻訳、分類など)
ログ出力(デバッグ用)
実装のポイント
Ingest プラグインでは、ドキュメントがインデックスに登録される直前のデータにアクセスし、変換処理を行います。
例えば、すべてのドキュメントに組織名のメタデータを追加する処理や、本文から特定のパターンを除去する処理などを実装できます。
テーマプラグインの開発
検索画面のデザインを完全にカスタマイズしたい場合は、テーマプラグインを開発します。
テーマの構成
テーマプラグインは、JSP ファイル、CSS、JavaScript、画像ファイルで構成されます。
fess-theme-custom/
├── pom.xml
└── src/
└── main/
└── resources/
├── css/
├── js/
├── images/
└── view/
├── index.jsp
├── search.jsp
└── header.jsp
既存のテーマを参考にしながら、JSP と CSS を修正してカスタムデザインを実現します。
開発のベストプラクティス
既存プラグインの参考
新しいプラグインを開発する際は、既存のプラグインのソースコードを参考にすることを強く推奨します。 CodeLibs の GitHub リポジトリで、すべてのプラグインのソースコードが公開されています。
例えば、データストアプラグインの開発では fess-ds-git や fess-ds-slack が良い参考になります。
テスト
プラグインのテストは、以下の観点で行います。
外部システムへの接続テスト
データ変換の正確性
エラーハンドリング(接続失敗、データ不正など)
パフォーマンス(大量データの処理時間)
バージョン互換性
Fess のバージョンアップ時に、プラグインの互換性を確認してください。 Fess のメジャーバージョンアップ時には、API の変更がある可能性があります。
まとめ
本記事では、Fess のプラグイン開発について解説しました。
プラグインアーキテクチャの概要(データストア、Ingest、テーマ、スクリプト)
カスタムデータソースプラグインの開発手順
Ingest プラグインによるドキュメント加工
テーマプラグインによる UI カスタマイズ
開発のベストプラクティス
プラグインにより、Fess を組織固有の要件に合わせて拡張できます。 アーキテクチャ・スケーリング編はここまでです。次回からは AI・次世代検索編として、セマンティック検索の基礎を扱います。