概要
このページでは、Fessの主要な機能とアーキテクチャをコンポーネント単位で説明します。 Fessは検索システムの構築を容易にするため、モジュール化された設計を採用しています。
アーキテクチャの全体像
Fessは以下の主要なコンポーネントで構成されています:
主要コンポーネント
1. クローラーサブシステム
クローラーサブシステムは、様々なデータソースからドキュメントを収集する役割を担います。
主要クラス・機能:
Crawler
役割: クロール処理の中心となるクラス
主な機能:
ウェブサイト、ファイルシステム、データストアからのドキュメント収集
クロール設定に基づいた対象の選別
クロールジョブの実行管理
クロール結果のセッション管理
実行方式:
スケジューラーによる定期実行
管理画面からの手動実行
コマンドラインからの実行
WebCrawler
役割: ウェブサイトのクロール処理
主な機能:
HTMLページの取得と解析
リンクの抽出と追跡
JavaScript実行サイトへの対応
認証が必要なサイトへの対応(BASIC/DIGEST/NTLM/FORM)
robots.txtの遵守
FileCrawler
役割: ファイルシステムのクロール処理
主な機能:
ローカルファイルシステムの巡回
ネットワークドライブ(SMB/CIFS)のアクセス
ファイル形式の判定と適切なパーサーの選択
権限に基づくアクセス制御
DataStoreCrawler
役割: 外部データストアのクロール処理
主な機能:
データベースからのデータ取得
クラウドストレージ(Google Drive、Dropbox、Box等)の連携
グループウェア(Office 365、Slack、Confluence等)の連携
プラグインによる拡張性
CrawlConfig
役割: クロール設定の管理
主な機能:
クロール対象URLまたはパスの定義
クロール深度の制限
クロール間隔の設定
除外パターンの指定
ラベルの付与
2. インデクシングサブシステム
インデクシングサブシステムは、収集したドキュメントを検索可能な形式に変換します。
DocumentParser
役割: ドキュメントの解析とテキスト抽出
主な機能:
Apache Tikaを利用した多様なファイル形式のサポート
メタデータの抽出
文字エンコーディングの自動検出
言語の自動判別
Indexer
役割: OpenSearch/Elasticsearchへのインデックス登録
主な機能:
ドキュメントのインデックス作成
バルクインデックスによる高速化
インデックスの最適化
古いドキュメントの削除
FieldMapper
役割: フィールドのマッピング定義
主な機能:
ドキュメントフィールドの定義
カスタムフィールドの追加
フィールドタイプの指定(text、keyword、date等)
多言語対応のアナライザー設定
3. 検索サブシステム
検索サブシステムは、ユーザーからの検索クエリを処理し、結果を返します。
SearchService
役割: 検索処理の中心
主な機能:
クエリの解析と最適化
OpenSearch/Elasticsearchへのクエリ実行
検索結果のランキング
ファセット検索のサポート
ハイライト表示
QueryProcessor
役割: 検索クエリの前処理
主な機能:
クエリの正規化
同義語展開
ストップワードの処理
クエリ補正
SuggestService
役割: サジェスト機能の提供
主な機能:
入力補完候補の生成
人気検索キーワードの提供
カスタム辞書の利用
RankingService
役割: 検索結果のランキング調整
主な機能:
ドキュメントブースト
フィールドブースト
カスタムスコアリング
関連度の調整
4. 管理サブシステム
管理サブシステムは、Fessの設定と運用を管理します。
AdminConsole
役割: ウェブベースの管理インターフェース
主な機能:
クロール設定の管理
スケジューラー設定
ユーザー・ロール管理
システム設定
ログ参照
Scheduler
役割: ジョブのスケジュール管理
主な機能:
クロールジョブの定期実行
インデックス最適化の定期実行
ログローテーション
Cron式によるスケジュール設定
BackupManager
役割: バックアップとリストア
主な機能:
設定データのバックアップ
インデックスのスナップショット
リストア機能
自動バックアップのスケジューリング
5. 認証・認可サブシステム
認証・認可サブシステムは、セキュリティとアクセス制御を管理します。
AuthenticationManager
役割: ユーザー認証の管理
主な機能:
ローカル認証
LDAP/Active Directory連携
SAML連携
OpenID Connect連携
ロールベースアクセス制御(RBAC)
RoleManager
役割: ロールとアクセス権限の管理
主な機能:
ロールの定義
ユーザーへのロール割り当て
ドキュメントレベルのアクセス制御
検索結果のフィルタリング
6. APIレイヤー
APIレイヤーは、外部システムとの連携を提供します。
SearchAPI
役割: 検索APIの提供
主な機能:
REST APIによる検索
JSON形式のレスポンス
OpenSearch対応
GSA(Google Search Appliance)互換API
AdminAPI
役割: 管理APIの提供
主な機能:
クロール設定のCRUD操作
インデックス管理
スケジューラー制御
システム情報の取得
7. データストレージ
データストレージは、Fessのデータ永続化を担当します。
ConfigStore
役割: 設定データの保存
主な機能:
クロール設定の永続化
システム設定の保存
ユーザー・ロール情報の管理
H2データベースまたは外部DBの利用
SearchEngine
役割: 検索エンジンとの連携
主な機能:
OpenSearch/Elasticsearchとの通信
インデックスの管理
クエリの実行
クラスタリング対応
プラグインアーキテクチャ
Fessは、プラグインによる拡張が可能です。
DataStoreプラグイン
役割: 外部データソースへの接続
提供されているプラグイン:
Atlassian(Confluence/Jira)
Box
CSV
Database
Dropbox
Git/GitBucket
Google Drive
Office 365
S3
Slack
その他
Themeプラグイン
役割: 検索画面のカスタマイズ
提供されているプラグイン:
Simple Theme
Classic Theme
Ingesterプラグイン
役割: インデックスデータの前処理・後処理
提供されているプラグイン:
Logger
NDJSON
Scriptプラグイン
役割: スクリプトによるカスタマイズ
提供されているプラグイン:
Groovy
OGNL
設定管理
FessConfig
役割: システム設定の一元管理
主な設定項目:
システム全般設定
クロール設定
検索設定
認証設定
通知設定
パフォーマンス設定
DynamicProperties
役割: 動的設定の管理
主な機能:
実行時の設定変更
環境変数の利用
プロファイル別設定
まとめ
Fessは、これらのコンポーネントが連携することで、強力な全文検索システムを実現しています。 各コンポーネントは疎結合な設計となっており、必要に応じてカスタマイズや拡張が可能です。
より詳細な開発者向け情報は、以下を参照してください: