モデル / データセット
codelibs/fess avatar
codelibs/fess

Fess 15.8.0 レビュー: OpenSearch 上の自前検索基盤をどう組み立てるか

Open-source, self-hosted enterprise & site search server built on OpenSearch. Crawls web / file / DB / cloud sources, 20+ languages, REST API, and AI/RAG & semantic search. Apache-2.0.

スター 1,134フォーク 175JavaApache-2.0

ひと目でわかる

これは何?
Fess は Web、ファイルシステム、DB、SaaS をつないで検索インデックスを作る Java 製の検索サーバーである。管理画面で設定が完結する代わりに、OpenSearch の運用とクロール設計は利用者側に残る。
誰に向いている?
社内文書や複数 SaaS を横断する検索を自前で持ちたいが、検索エンジンのチューニングを内製する余力はないチームに向く。逆に、数万件程度の静的サイト検索や、日本語の形態素解析辞書を細かく差し替えたい用途では、Fess の管理画面経由の設定が遠回りになる。
商用利用できる?
できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。直近 1 日以内に新しいコミットがあります。
何の言語で書かれている?
主に Java です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

Fess が埋めるのは「クロールから権限付き検索 UI まで」の空白

全文検索を自前で作るとき、Lucene や OpenSearch を直接触る作業は意外に小さい。実際に工数がかかるのは、クロール対象の登録、差分の再取り込み、ファイル形式ごとのテキスト抽出、ログインユーザーごとの表示制御、そして検索画面の提供である。Fess はこの周辺部分を一式で持つ。README は Fess を「enterprise search server that you can install and run on any platform with a Java runtime」と説明し、OpenSearch の知識がなくてもブラウザベースの管理 UI で設定できるとしている。想定利用者は、社内のファイルサーバー、Confluence、SharePoint、S3 などに散った文書を、LDAP や SAML のアカウント体系に紐づけて検索させたい情報システム部門か、その委託を受けた開発チームである。逆に、単一の公開 Web サイトに検索ボックスを足したいだけなら、Fess Site Search という別プロダクトが用意されている。

構成要素は Fess 本体と OpenSearch、そしてコネクタの三層

アーキテクチャは README とリポジトリ構成から読み取れる範囲でも素直である。Fess 本体は Java アプリケーションで、検索エンジンのバックエンドとして OpenSearch を要求する。Docker イメージには OpenSearch が同梱されるが、それ以外のインストール方法では別途用意する必要があると README に明記されている。文書の取り込みは Fess 内蔵のクローラが担い、Web、ファイルシステム、データストアの三系統が管理画面から設定できる。データストア側は本体に同梱されず、fess-ds-atlassian、fess-ds-s3、fess-ds-salesforce のように個別リポジトリのコネクタとして提供される。つまり「対応データソース」の一覧は Fess 本体の機能表ではなく、別々に保守されるプラグインの集合体だという点を把握しておきたい。取り込んだ文書は OpenSearch のインデックスに格納され、検索 UI と REST API の両方から引かれる。ファセット、ソート、検索サジェストはこの層の機能である。

導入手順: ZIP を展開して bin/fess を叩くまで

配布形式は DEB、RPM、ZIP の三つで、いずれも Releases ページから取得する。README が示す ZIP の例は次のとおり。unzip fess-<version>.zip のあと cd fess-<version> して ./bin/fess を実行する。起動後、検索 UI は http://localhost:8080/、管理 UI は http://localhost:8080/admin/ で、初期のユーザー名とパスワードは admin/admin と README に記載されている。クロール対象の登録は管理 UI の Web、File、Data Store の各設定ページで行い、実行は Scheduler ページから開始する。Docker を使う場合は ghcr.io に公開されたイメージがあり、docker-fess リポジトリの compose ディレクトリに Compose ファイルがある。ソースから動かす場合は Java 21 以降と Maven が必要で、mvn antrun:run で OpenSearch プラグインを plugins ディレクトリへ取得し、IDE から org.codelibs.fess.FessBoot を実行する。パッケージ作成は mvn package で target/releases に出力され、mvn rpm:rpm と mvn jdeb:jdeb がそれぞれ RPM と DEB を作る。

統合テストが前提とする「起動済みサーバー」という制約

Fess のテスト構成は、この製品が単体で完結しないことをよく表している。README によれば統合テストには稼働中の Fess サーバーと OpenSearch が必要で、まず mvn antrun:run と mvn package を実行し、target/releases の ZIP を展開して ./fess-*/bin/fess & で起動する。起動完了は最大 60 秒かかることがあり、curl -s "http://localhost:8080/api/v1/health" が JSON を返すまで待つ。SearchApiTests 向けに fess-testdata リポジトリを /tmp/fess-testdata へ clone する手順も明記されている。実行は mvn test -P integrationTests に -Dtest.fess.url と -Dtest.search_engine.url を渡す形で、個別ケースは -Dtest=SearchApiTests のように絞り込む。ここから読み取れるのは、テストが外部プロセスに依存する結合寄りだという性質である。CI で回すなら Fess と OpenSearch の二つのプロセスを立ち上げ、ヘルスチェックが通るまで待つ仕組みを自分で用意する必要がある。

向かない場面: 軽量サイト検索と、解析器を細かく触りたい場合

Fess は Java ランタイムと OpenSearch を要求する。個人ブログやドキュメントサイトに検索ボックスを一つ足す用途では、この構成は明らかに過剰で、静的インデックスを生成する方式のほうが運用も配布も軽い。もう一つの境界は日本語解析である。README は 20 以上の言語のテキスト解析に対応すると述べるが、その設定は管理 UI 経由が基本になる。形態素解析辞書の差し替えや、フィールドごとに異なるアナライザを当てるといった細かい制御をしたい場合、OpenSearch のインデックス定義を直接書くほうが速い。Fess の抽象化はここで邪魔になる。加えて、データストアのコネクタは本体とは別リポジトリで保守されているため、対象 SaaS の API 変更に対する追随は Fess 本体のリリースサイクルとは独立である。コネクタ側の更新状況を別途確認せずに導入計画を立てるのは避けたい。

Elasticsearch 系ツールとの違いは抽象化の層にある

比較対象として分かりやすいのは Elasticsearch とその周辺ツールである。Elasticsearch は検索エンジンそのもので、文書の投入は Logstash や Beats、あるいは自前のクライアントコードが担い、検索 UI と権限モデルは別途作り込む。Fess はこのうちクローラ、文書抽出、権限フィルタ、検索 UI を最初から持つ。Apache-2.0 のオープンソースとして配布され、データソース側のコネクタも同じリポジトリ群で公開されている点は、ライセンス条件を読み解く負担が小さい。ただし抽象化には代償がある。Elasticsearch を直接使えばインデックス設計もクエリ DSL も自由だが、Fess では管理 UI が扱える範囲が実質的な上限になる。逆に、検索基盤の内製に人手を割けず、まず動くものを置きたいという判断なら、Fess の抽象化は妥当な取引である。どちらが優れているかではなく、どの層を自分で持ちたいかの問題である。

Apache-2.0 とメンテナンス費用の読み方

ライセンスは Apache-2.0 で、リポジトリの LICENSE に全文がある。商用利用や改変、再配布が許される寛容なライセンスだが、実際の導入では Fess 本体だけでなく、同梱する OpenSearch と各 fess-ds-* コネクタのライセンスも自組織のポリシーに照らして確認する必要がある。ここは法的助言ではなく、確認項目の整理として読んでほしい。メンテナンス面では、リリースが fess-15.8.0、15.7.0、15.6.1 と継続して出ており、15.8.0 は 2026-08-20 付、リポジトリへの最終 push は 2026-09-10 と記録されている。アップグレードコストを左右するのは本体の変更よりも、OpenSearch のバージョン追随と、利用中のコネクタがそのバージョンに追従しているかである。Java 21 以降という要件も、社内の他システムが Java 17 で止まっている場合には移行計画に影響する。バージョン間の互換性は README からは判断できないため、Installation Guide の supported versions を導入前に確認する必要がある。

編集部の結論

社内文書や複数 SaaS を横断する検索を自前で持ちたいが、検索エンジンのチューニングを内製する余力はないチームに向く。逆に、数万件程度の静的サイト検索や、日本語の形態素解析辞書を細かく差し替えたい用途では、Fess の管理画面経由の設定が遠回りになる。導入前に確認すべきは、同梱 Docker イメージ以外で動かす場合の OpenSearch のバージョン整合、Java 21 が用意できるか、そして対象データソースに対応する fess-ds-* コネクタが存在するかの三点である。

公式情報源

  1. codelibs/fess on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
コミュニティノート

コミュニティノート