Fessの歴史と今後

Fess (フェス) は「5 分で簡単に構築可能な全文検索サーバー」です。(実際に5分で構築できるかはおいておいて、それくらい簡単に構築して利用できる感じのものを目指しています) Java 実行環境があればどの OS でも実行可能で、Apache ライセンスなのです。
Fessもバージョン10になり、2009年にリリースしてから、7年近く開発を続けています。ここで、一度振り返り、今後も考えてみたいと思います。

Fess誕生の経緯

当時、主にポータルサーバ(Apache Jetspeed 2)を開発して、その導入をしていましたが、ポータルサーバを入れるときに検索システムの要求も結構ありました。検索システムへの要求に答えるために、Apache Solrが使えそうということで使い始めたものの、使ってみるとシステムとして導入して使えるようにするまでにはかなりのギャップがあることに気づきました。Solrは検索サーバであり、検索画面やクロールなどは開発する必要があり、単に検索システムをシステム全体の一部として導入したいだけだとしてもかなりの開発コストが必要でした。この問題を解決するために、2009年9月にFess 1.0をリリースして、手軽に検索システムを利用できる世界を目指し始めました。

Fessの進化

Fess 1.0はウェブとファイルシステムをクロールして、検索できるようにするくらいのシンプルなものでした。Fess 2.0〜3.0あたりから商用としても導入をいろいろと始め、ここからが案件ベースの要求により、機能拡張されていきました。SambaやFTPに対応したり、Active Directory/LDAPなどの認証システムと連携して、社内のドキュメントのセキュアな検索とか、実践でかなり鍛えられていくことで、よほどの要件がない限りは簡単に導入していくことができるようになったと思います。あとは、Solrも進化していったので、それに合わせて検索システムとしても強化されていったと思います。

Fess 9での停滞

機能拡張して、5年近く開発し続けているので、ベースのフレームワーク等が古くなっていってしまいました。Java 6やSeasar2/SAStrutsなどの過去の遺産を捨てる必要があるのに加えて、近年の検索システムへの要求が検索対象の大規模化が進み、検索システムのクラスタが必要な状況になり、アーキテクチャから見直しが必要になりました。フレームワーク等の選定において、以下のことを軸に考えました。

  • DBFluteを使う。依存するライブラリの中で、他のライブラリは変更しても良いのですが、DBFluteは使いやすさや信頼性の観点でこれなしの開発が考えられません。なので、DBFlute中心のフレームワーク選定を行いました。Springの利用も考えましたが、Seasar2からの移行のしやすさなどを考えて、LastaFluteという新しいフレームワークで開発することにしました。
  • SolrとDBをElasticsearchに移行する。当時、Solrで分散検索をするためには、SolrCloudを頑張るか、分散検索の設定を頑張るかになる気がするのですが、これらが案件で導入する作業としては現実感が全くありませんでした…。そのときに、Elasticsearchも十分にナレッジを持っていたこともあり、スケールアウトのしやすさ観点でElasticsearchへの移行を決めました。また、Fess 9まで設定データ等をDB(MySQLなど)に入れていたのですが、導入の際にDBまでの冗長化等を考えると、設計・構築コストが発生するので、すべてをElasticsearchに入れるようにしました。

Fess 10の誕生

新しいアーキテクチャが決まったので、Java 8, DBFluteやLastaFluteなどの〜Fluteシリーズ, Elasticsearchというものをベースに2015年あたりに開発を始めていきました。1年近くかかりましたが、2016年2月にFess 10をリリースすることができました。商用サービスとしても開始しているので、すでにいろいろな企業様で稼働しています。あとは、Fess 10からは日本にとどまらず、グローバルに展開するため、githubでの開発を中心に行っています。
機能的なところでは、Active Directory連携やロール検索を見直すことで、今まで商用でしか導入が難しかった機能が設定だけでできるようになったり、より利用しやすくなっているかと思います。あとは、Elasticsearchクラスタを適切に構築すれば、スケールアウトもしやすい感じになっていると思います。個人的には、Fess 9からFess 10へは劇的な進化になっていると思います。その進化の中で、DBの利用だったり、JavaEEサーバへのデプロイだったり、いくつか捨てたものはありますが、捨てることで得たものはかなり大きいと思います。

今後

今後も開発し続けます。細かい機能追加はあると思いますが、Elasticsearchのバージョンが上がるのに合わせた更新が増えるかと思います。
あとは、近年の要求としては、検索対象の大規模化、機械学習や自然言語処理的な要求が増えてきているので、このあたりでの機能拡張をしていくと思います。
まずは、年内か年明け辺りにElasticsearch 5に対応したFess 11がリリースすることになると思います。
あと、補足的な感じですが、Fessはオープンソースで提供し続けてきていますが、これは自社用独自カスタマイズや構築のコンサルティング等をリクエストしていただいているお客様がいることで成り立っていると思います。これらのビジネス上、重要な場所でいろいろと利用していただいていることに大変感謝しております。Fessは自由にご利用いただけると思いますが、検索のノウハウがないと1000万ドキュメントの検索システムの構築は難しかったり、セキュアな検索が求められるところではこれもノウハウが必要になるかと思います。この辺のことを様々な形で支援できると思いますので、気軽に商用サポートにご相談していただければと思います。(という感じで、今後も開発し続けることができるように宣伝…)

Fessの中のSolr

はじめに

これは Solr Advent Calendar 2014 – Qiita 、10日目の記事です。
Fessの中で使われているSolrについて、ご紹介します。
Tomcat上でウェブアプリとか作っておいて、そこにSolrを相乗りとかさせるときに参考になるかもしれません。

Fessの中のSolr

ざっくりではありますが、Solrを同梱しているFessの配布物についてまとめます。

  • FessはTomcatで配布している
  • solr.warをTomcatに配備している(Fessのfess.warと相乗り)
  • SolrにBASIC認証を設定している
  • Fess内ではSolrJでアクセスしている

今回は、FessでSolrJを使って、どのように呼び出しているかの細かい話は省略しますが、SolrLibというものを作って、SolrJをラップして利用しています。
続いて、実際の中身を見ていきたいと思います。

ダウンロード

まずは、Fessをダウンロードします。
現在、ここから fess-server-9.3.1.zipをダウンロードできます。
今回は、特に実行とかが目的ではないので、これ以外は特に必要はありません。

展開

fess-server-9.3.1.zipを展開します。

$ unzip fess-server-9.3.1.zip
$ cd cd fess-server-9.3.1

展開すると、Tomcatをご存じの方はすぐわかるかと思いますが、ほぼTomcatな感じです。
FessでSolrをTomcat上で動かすために変更している部分は以下になります。

  • solrディレクトリ
  • webapps/solrディレクトリ
  • bin/setenv.*ファイル
  • conf/tomcat-users.xmlファイル

Fessの配布物を生成するビルドスクリプトの中で、Tomcatをダウンロードして、Solrをダウンロードして、fess.warをビルドして、必要なファイルを置き換えてTomcatに固め直す、ということを行っています。
それを行っているのがfess-serverというプロジェクトになります。
ですので、そのプロジェクトのbuild.xmlを見ると、solr.warをTomcatにどのように配備しているのかが分かるかと思います。
簡単にですが、置き換えている概要的な説明をしておきます。

solrディレクトリ

Solrの配布物に含まれるexampleをベースにcollection1などを持ってきて、必要なファイルを置き換えています。
schema.xml、solrconfig.xml、solr.xml、core.propertiesはFess独自で用意しています。
あとは、Fessは通常の全文検索のインデックスをcore1として、サジェスト用インデックスにはcore1-suggestという感じで2つのコアを利用しています。

webapps/solrディレクトリ

Solrの配布物に含まれるsolr.warを展開して、webapps以下に置いています。
BASIC認証を適用しているので、web.xmlにその設定を加えています。

bin/setenv.*ファイル

Solr用にはsolr.solr.homeを設定しています。

conf/tomcat-users.xmlファイル

BASIC認証用のユーザーを追加しています。
以上のような形でSolrをFessに組み込んでいます。
という感じで、Solrの配布物を持ってきて、上記のファイルを持ってきて編集すれば、ご利用の環境にSolrを配備して利用することができるようになるかと思います。機会があれば、試してみるのも良いかと。

Fess 9.3のリリース

Fess 9.3のリリースは11/6に行ったのですが、その後、特に告知とかできていなかったので…。Fess 9.3では主に以下の点で修正が入っています。

  • Solr 4.10.2の採用
  • 差分クロール周りのロジック修正
  • サジェストを検索ログ、登録した候補、NGワードによる除外などの拡張
  • キーマッチ機能(特定の検索語が入力されたときに特定のドキュメントをブーストする)

上記以外には細かい修正がいろいろと入っている感じです。
リリース後、データストアクロール時に1つ問題があったため、現在は9.3.1を提供しています。
現状は、Fess 10に向けての作業に注力しているので、OSSとして、9.4をリリースするかは未定です。
(商用としてはメンテナンスの都合上、リリースする可能性はあるかとは思いますが…)
という感じですが、引き続きよろしくお願いたしますー。

Fess 10の計画

Fess 9.3を無事にリリースすることができましたが、次はFess 10を考えています。Fess 1.0をリリースしたのは、2009年9月なので、もう5年も経過し、多くの進化を遂げたと思います。FessはApacheライセンスで提供しているOSSですが、商用製品・サポートとして提供しているN2 Searchもおかげさまでいろいろなところに導入させていただきました。5年も経ち、Fessで利用しているベースのフレームワーク等は変わることなくやってきましたが、そろそろグローバルに展開する時期にもなり、OSSとして受け入れてもらっていくためにはそろそろSeasar2からの移行が必要と考えています。
というわけで、Fess 10ではフレームワークの一新を図ります。Fess 10は現在、社内で移行作業が進められていますが、ある程度作業が落ち着いてきたところで、githubへpushされると思います。という感じで、今後ともFessをよろしくおねがいします。

検索システム用テストデータリポジトリ

Fessでどのような種類のファイルを検索対象としてサポートしているか、っていうのを聞かれるけど、ファイルの種類も無数にあるし、Fessとしてはすべてのファイルに対してベストエフォートでがんばってテキストを抽出しにいくのでなかなか回答に困る。他社のものを見ても、同じ感じでまるっとしたことしか書いていないので、実際にどうなのかは結構謎な感じなものが多い。Google検索アプライアンスも220種類というような記述を見たけど、実際にそれもどうなのかよくわからん。まぁ、そもそもこの辺のテスト用データ的なものが存在しないから、他の検索システムも含めてまるっとした話しかしないわけで…。というわけで、テスト用のファイル置き場をここに作ってみました。こんなファイルがあるよ、っていう場合はプルリクエストをしてくださいー。