Fessのアーキテクチャと主要機能

概要

このページでは、Fessの主要な機能とアーキテクチャをコンポーネント単位で説明します。 Fessは検索システムの構築を容易にするため、モジュール化された設計を採用しています。

アーキテクチャの全体像

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は、これらのコンポーネントが連携することで、強力な全文検索システムを実現しています。 各コンポーネントは疎結合な設計となっており、必要に応じてカスタマイズや拡張が可能です。

より詳細な開発者向け情報は、以下を参照してください: