このページでは、Fess のアーキテクチャ、コード構造、 主要なコンポーネントについて説明します。 Fess の内部構造を理解することで、効率的に開発を進めることができます。
全体アーキテクチャ
Fess は、以下の主要なコンポーネントで構成されています:
レイヤーの説明
ユーザーインターフェース層
ユーザーが直接操作する画面です。 JSP と HTML、JavaScript で実装されています。
検索画面: エンドユーザー向けの検索インターフェース
管理画面: システム管理者向けの設定・管理インターフェース
Web アプリケーション層
LastaFlute フレームワークを使用した Web アプリケーション層です。
Action: HTTP リクエストを処理し、ビジネスロジックを呼び出す
Form: リクエストパラメータの受け取りとバリデーション
Service: ビジネスロジックの実装
ビジネスロジック層
Fess の主要な機能を実装する層です。
Crawler: Web サイトやファイルシステムからデータを収集
Job: スケジュール実行されるタスク
Helper: アプリケーション全体で使用されるヘルパークラス
データアクセス層
DBFlute を使用した OpenSearch へのアクセス層です。
Behavior: データ操作のインターフェース
Entity: データの実体
Query: 検索クエリの構築
データストア層
検索エンジンとして OpenSearch 3.5.0 を使用します。
プロジェクト構造
ディレクトリ構造
主要パッケージの詳細
app パッケージ
Web アプリケーション層のコードです。
app.web パッケージ
検索画面とエンドユーザー向け機能を実装します。
主要なクラス:
SearchAction.java: 検索処理LoginAction.java: ログイン処理
例:
app.web.admin パッケージ
管理画面の機能を実装します。
主要なクラス:
AdminWebconfigAction.java: Web クロール設定AdminSchedulerAction.java: スケジューラー管理AdminUserAction.java: ユーザー管理
命名規則:
Adminプレフィックス: Admin 用 ActionActionサフィックス: Action クラスFormサフィックス: Form クラス
app.service パッケージ
ビジネスロジックを実装するサービス層です。
主要なクラス:
SearchLogService.java: 検索ログサービスUserService.java: ユーザー管理サービスScheduledJobService.java: ジョブ管理サービス
例:
crawler パッケージ
データ収集機能を実装します。
crawler パッケージ(fess-crawler ライブラリ)
クローラーの基盤機能は fess-crawler ライブラリで実装されています。
主要なクラス(fess-crawler):
CrawlerClient.java: クローラークライアントのインターフェースHcHttpClient.java: Web サイトのクロール(HTTP クライアント)FileSystemClient.java: ファイルシステムのクロールExtractorFactory.java: エクストラクターのファクトリTikaExtractor.java: Apache Tika を使用した抽出Transformer.java: 変換処理のインターフェース
crawler パッケージ(fess 本体)
Fess 固有のクローラー拡張を実装します。
主要なクラス:
FessStandardTransformer.java: 標準的な変換処理FessXpathTransformer.java: XPath を使用した変換処理
opensearch パッケージ
OpenSearch との連携を実装します。
opensearch.client パッケージ
OpenSearch クライアントの実装です。
主要なクラス:
SearchEngineClient.java: 検索エンジンクライアント
opensearch.query パッケージ
検索クエリの構築を実装します。
主要なクラス:
QueryCommand.java: クエリコマンドQueryProcessor.java: クエリ処理
helper パッケージ
アプリケーション全体で使用されるヘルパークラスです。
主要なクラス:
SystemHelper.java: システム全体のヘルパーQueryHelper.java: クエリ構築のヘルパーCrawlingConfigHelper.java: クロール設定のヘルパーSearchLogHelper.java: 検索ログのヘルパーUserInfoHelper.java: ユーザー情報のヘルパーViewHelper.java: ビュー関連のヘルパー
例:
job パッケージ
スケジュール実行されるジョブを実装します。
主要なクラス:
CrawlJob.java: クロールジョブSuggestJob.java: サジェストジョブScriptExecutorJob.java: スクリプト実行ジョブ
例:
entity パッケージ
OpenSearch のドキュメントに対応するエンティティクラスです。 このパッケージは DBFlute によって自動生成されます。
主要なクラス:
SearchLog.java: 検索ログClickLog.java: クリックログFavoriteLog.java: お気に入りログUser.java: ユーザー情報Role.java: ロール情報
注釈
entity パッケージのコードは自動生成されるため、 直接編集しないでください。 スキーマを変更して再生成することで更新します。
mylasta パッケージ
LastaFlute の設定とカスタマイズを行います。
mylasta.action パッケージ
Action の基底クラスを定義します。
FessUserBean.java: ユーザー情報FessHtmlPath.java: HTML パス定義
mylasta.direction パッケージ
アプリケーション全体の設定を行います。
FessConfig.java: 設定の読み込みFessFwAssistantDirector.java: フレームワーク設定
デザインパターンと実装パターン
Fess では、以下のようなデザインパターンが使用されています。
MVC パターン
LastaFlute による MVC パターンで実装されています。
Model: Service、Entity
View: JSP
Controller: Action
例:
DI パターン
LastaFlute の DI コンテナを使用します。
Factory パターン
各種コンポーネントの生成に使用されます。
Strategy パターン
クローラーやトランスフォーマーで使用されます。
設定管理
Fess の設定は複数のファイルで管理されています。
fess_config.properties
アプリケーションの主要な設定を定義します。
fess_config.xml
LastaDi コンポーネント設定ファイルです。
fess_message_*.properties
多言語対応のメッセージファイルです。
fess_message_ja.properties: 日本語fess_message_en.properties: 英語
データフロー
検索フロー
クロールフロー
拡張ポイント
Fess は、以下のポイントで拡張できます。
カスタムクローラーの追加
CrawlerClient インターフェースを実装して、独自のデータソースに対応できます。
カスタムトランスフォーマーの追加
Transformer を実装して、独自のデータ変換処理を追加できます。
カスタムエクストラクターの追加
Extractor を実装して、独自のコンテンツ抽出処理を追加できます。
カスタムプラグインの追加
管理画面のプラグイン管理機能を使用して、独自のプラグインを追加できます。
参考資料
フレームワーク
技術ドキュメント
次のステップ
アーキテクチャを理解したら、以下のドキュメントを参照してください:
開発ワークフロー - 実際の開発フロー
ビルドとテスト - ビルドとテスト
コントリビューションガイド - プルリクエストの作成