Fessのサイトを移行

今まで、http://fess.sourceforge.jp/にありましたが、http://fess.codelibs.org/にサイトを移行しました。SVN、チケット管理、リリース物管理とかは現時点では移行する予定はありません。これに合わせて、今までMavenリポジトリも移行しました。そもそも fess.sourceforge.jp に jar とか置いておいて良いのかがちょっと怪しかったというのもあったのですが、それが解消されることになったかと。Fessの共通的な機能を結構、CodeLibsに切り出したというのもありますが、Fess自体もCodeLibsの一環で良いかなという感じもしているのと、ドメインを新たに取るもの面倒というのもあったりで、fess.codelibs.orgにしてみました。それに合わせて、CodeLibsのサイトも用意したものの、地道に手直しをしていく感じかと思います。そんな感じでFess自体は特に何も変わることはありませんが、従来よりは開発の縛りがなくなるのでやりやすくなるかな、とか考えています。というわけで、引き続きよろしくおねがいします。

FessCloudを作ってみる

ちょっと実験的な感じだけど、FessCloudを作ってみた。まぁ、FessCloudと言っても、SolrCloudを使ったFessみたいな感じです。なので、SolrCloudな感じだけど、Fess自体も適当に追加していけるから、ロードバランサとかで適当に負荷分散とかしてくれれば、Fessについてもクラウド的には使えるかと思う。
現状、これのリリース物があったりするわけじゃなくて、Linux(bash)で環境構築できる感じにした感じです。本当はAntとかでWindowsとかでも試せるようにしたかったのですが、時間の都合でシェルで作りました。

$ svn co http://svn.sourceforge.jp/svnroot/fess/fess-cloud/trunk fess-cloud
$ cd fess-cloud/

今回の構成は、全部ローカルで試す感じにしてみます。構成的にはSolrCloudのWikiにあるExample CのZooKeeper+Solrが3台とSolr単体が1台の構成にします(さらに別途Fessがいます)。ZooKeeper+Solrの構成では、Solrのポートを8180とした場合は、ZooKeeperのポートは+1000した9180を利用する仕組みになっています。環境構築時にZooKeeperのアドレスとポートを決めておく必要があります。今回は以下のような感じ。

Fess Solr ZooKeeper
Fess Server1 localhost:8080
ZK+Solr Server1 localhost:8180 localhost:9180
ZK+Solr Server2 localhost:8280 localhost:9280
ZK+Solr Server3 localhost:8380 localhost:9380
Solr Server4 localhost:8380

通常のFessだと、同じところにSolrを置いていますが、今回はSolrを取り除いています。今回はshardsの数はExample Cと同じように2で作ります。
それから環境をビルドします。引数にはZooKeeperのホストをカンマ区切りで記述します。

$ bash build.sh localhost:9180,localhost:9280,localhost:9380

実行するとtarget以下にfess-server-8.0.0とfess-cloud-jettyが生成されます。fess-cloud-jettyの方がZK+Solrの環境になります。Fessで利用しているSolrのschema.xmlなどが組み込まれています。
次に、fess-cloud-jettyコピーしてZK+Solr環境を作ります。今回はすべて同じサーバー上で行なっていますが、別サーバーで試すためには、fess-cloud-jettyをコピーすればOKです。

$ cd target
$ cp -r fess-cloud-jetty/ fess-cloud-1
$ cp -r fess-cloud-jetty/ fess-cloud-2
$ cp -r fess-cloud-jetty/ fess-cloud-3
$ cp -r fess-cloud-jetty/ fess-cloud-4
$ chmod +x fess-cloud-*/bin/*.sh
$ cd ..

あとは、順に起動していきます。server.shを含めてあるのでそれを実行すればOKです。(将来的にserver.shは変更するかも…)
別ターミナルで実行したほうがわかりやすいので、それぞれを順に上げていきます。
まず、ターミナル1でZK+Solr Server1を上げます。shardの数も2を指定します。

$ cd target/fess-cloud-1/
$ bash bin/server.sh leader 8180 2
$ tail -f logs/solrcloud.log

その他のZooKeeperが起動していないのでExceptionがでますが、無視して進めます。
ターミナル2でZK+Solr Server2を上げます。

$ cd target/fess-cloud-2/
$ bash bin/server.sh replica 8280
$ tail -f logs/solrcloud.log

ターミナル3でZK+Solr Server3を上げます。

$ cd target/fess-cloud-3/
$ bash bin/server.sh replica 8380
$ tail -f logs/solrcloud.log

ターミナル4でSolr Server4を上げます。

$ cd target/fess-cloud-4/
$ bash bin/server.sh solr 8480
$ tail -f logs/solrcloud.log

ここまでできたら、ブラウザから http://localhost:8180/solr/#/~cloud にアクセスしてみます。すると、SolrCloud図が表示されます。server.shスクリプトの第一引数がサブコマンドで、leaderにするとSolrのschema.xmlなどをZooKeeperに取り込みます。replicaはZKとSolrを起動して、別なZooKeeperから値を取得してきます。solrはZooKeeperなしでSolrだけ起動します。Solrだけを起動しますが、Solrの設定情報はZooKeeperから参照します。その他にstopとcleanがありますが、server.sh stop とすれば、起動したものを停止できます。clean で ZooKeeperで取り込んでいたものを削除します。インデックスまでは削除しません。(将来的にはこの辺のサブコマンドのあり方を見直したいです…)
次はFessです。target/fess-server-8.0.0のものを利用します。Fessも複数立ち上げたければ、それをコピーして別サーバーに持っていってください。

$ cd target/fess-server-8.0.0
$ ./bin/startup.sh

普通に起動するだけです。この辺は普通のFessと変わりません。あとは、いつのどおり、クロール設定をしてクロールして、検索してみてください。FessからはZooKeeperから取得できるSolrCloudの情報を元にアクセスするので、ZooKeeperのホスト指定を正しくしていれば、どっかのサーバーで起動すればSolrCloudから検索結果を取得することができると思います。これでFessCloudが完成です!
という感じで、FessCloudは以上ですが、現時点で気づいていることは、Fessの管理画面でシステム設定のSolrインスタンス情報がunknownになります。これは同じTomcatにないので仕方がないのですが…。Solrのスキーマについては、標準のschema.xmlにはtext_gosenのフィールド型があるのですが、gosenがあるとSolrCloudがgetConfigDir()的な(?)Exceptionが発生するため、取り除いてあります。あとは、本当はJettyでなく、Tomcatで動かしたかったのですが認証周りでいろいろとやる必要があるようで、ZooKeeperの知識を深めないとよくわかりません…(まだ、勉強不足です…)。そんな感じですが、普通に動いて、Fessからリクエストを送れば、SolrCloudの何かが返してくれるので、見ると面白いです。

Fess 8のリリース

Fess 8をリリースしました。ここからダウンロードすることができます。Fessも初回リリースは 2009/9 だから、3年半以上開発し続けている感じです。4とか5とかあたりで、もう機能追加するものはないだろうと思いつつ、商用で導入させていただいたりするといろんな要件が出てきて、それと共に機能追加がされて拡張され続けています。Fess 8も7のリリースから半年くらい経ちますが、内部的にはいろいろと変わっています。Fess の汎用的な部分は、codelibsというライブラリプロジェクトを作って、そっちに移したりしています。ざっくりと、Fess 8  の機能をまとめると、

Solr 4.1 の導入

Solr 3.6からSolr 4.1に移行しました。これにより、検索パフォーマンスの改善やメモリ使用量の削減などが実現されていると思います。また、Solr 4 にはいろいろな機能があるので、それを利用することができるようになるかと思います。Fess ではオートコミット系はsolrconfig.xmlで無効にしたりしているので、その辺とかも使いたい場合はSolrをいろいろと設定してやってください。

Solr の状態管理

Fess の内部処理でSolrの状態管理とか行なっていましたが、従来は生死くらいのざっくりした感じの管理でしたが、この辺の機能をcodelibsのsolrlibに移して、Solrの生死状態とインデックスが正常にコミットまでされたかを管理できるようにしました。solrlibの実装を変えれば細かい管理ができるようになるかと思います。

Responsive Web Design

管理画面は従来通りのPCだけのサポートですが、検索画面についてはResponsive Web Design対応をしました。ですので、検索画面はスマホ、タブレット、PCで最適化されているかと思います。ガラケーは従来通りガラケー用画面で利用可能です。

Google Miniからの移行をしやすくする

Google MiniではFessにない機能がありました。たとえば、inurlとか、コレクションとか。Google Mini の代替システムとして利用しやすくするために、inurl:〜を利用できるようにしたり、コレクション的なことをできるようにするために、ラベル機能を拡張してあります。ラベル機能は従来はクロール設定で指定していましたが、ラベルの設定でラベルを与えるパスを正規表現で記述できるのでクロール設定で選択しなくても、柔軟にラベルを検索対象のドキュメントに設定することができるようなっています。

fess-launcherの改善

まぁ、この機能はJavaアプレットなので、近頃のJava問題的にどうなのか微妙な立場のものなのですが、file:〜にアクセスするためには現状、この方法しかないので、不具合修正を行なっています。

ファセット関連

検索結果とかに今までファセット的なものがなくて、利用イメージがつきにくかったかもしれませんが、一応、例として検索結果の右側に表示することにしました。
まだまだ、細かい話はいろいろとあるような気もしますが、メジャーバージョンアップ的な感じで変わったかな、という感じがしています。近頃、機能は多くなり、リリース物を作るのも結構な時間が必要になってきています…。一応、あれこれとテストしていますが、何かバグとかもあるかもしれません。何かありましたら、FessのMLやフォーラムなどでお知らせいただけると助かります。また、商用利用でサポートが必要な場合等もぜひお知らせください(Fessを一緒に売っていただける個人や企業の方も大歓迎です)。そんな感じですが、どうぞご利用ください。