Fess/Solrのレプリケーション

Fess自体にもreplication機能があるけど、最近のSolrはそれ自体でも持っているので、それを使ってみる。まぁ、今後のFessもSolrのreplication機能を使うのをデフォルトでも良いかなっとも思うし。そんなわけで、Fessというか、Solrというか、そのreplication機能の使い方をまとめておく。今回は、同じサーバー上に2つのFessを試すことにする。別サーバーでのレプリケーションをするならその部分だけホスト名にすれば良い。
というわけで、まずは、環境準備。

$ unzip fess-server-7.0.0.zip
$ cp -r fess-server-7.0.0 fess-server-7.0.0-master
$ mv fess-server-7.0.0 fess-server-7.0.0-slave
$ ls
fess-server-7.0.0-master  fess-server-7.0.0-slave

という感じで2つのFessを展開する。まずはマスタ(インデックス更新)側の設定をする。

$ cd fess-server-7.0.0-master/
$ vi solr/core1/conf/solrconfig.xml
<requestHandler name="/replication" >
    <lst name="master">
        <str name="replicateAfter">startup</str>
        <str name="replicateAfter">optimize</str>
        <str name="backupAfter">optimize</str>
        <str name="confFiles">schema.xml,stopwords.txt,stopwords_ja.txt,elevate.xml,stoptags_ja.txt,synonyms.txt,mapping_ja.txt,mapping-FoldToASCII.txt,mapping-ISOLatin1Accent.txt,protwords.txt,compositePOS.txt,spellings.txt,currency.xml</str>
    </lst>
    <str name="maxNumberOfBackups">1</str>
</requestHandler>
$ vi conf/server.xml
8005->9005
8080->9090
8009->9009
$ vi webapps/fess/WEB-INF/classes/fess_solr.dicon
8080->9090
$ vi webapps/fess/WEB-INF/classes/app.dicon
8080->9090
$ vi webapps/fess/WEB-INF/classes/jdbc.dicon
19092->29092
$ vi webapps/fess/WEB-INF/web.xml
19092->29092

という感じでsolrconfig.xmlにreplicationの設定を追加する。デフォルトではコメントアウトされているものがあるので、そのあたりに上記の物を設定すれば良い。あとは、同じサーバーで試すには利用するポートがかぶるので、今回はマスタ側のものだけ変えておく。まぁ、パスワードとかも変えている場合は、同様に修正が必要。そんで次はスレーブ側の設定。

$ cd ../fess-server-7.0.0-slave/
$ vi solr/core1/conf/solrconfig.xml
<requestHandler name="/replication" >
    <lst name="slave">
        <str name="masterUrl">http://localhost:9090/solr/core1/replication</str>
        <str name="pollInterval">00:00:60</str>
        <str name="compression">internal</str>
        <str name="httpConnTimeout">5000</str>
        <str name="httpReadTimeout">10000</str>
        <str name="httpBasicAuthUser">solradmin</str>
        <str name="httpBasicAuthPassword">solradmin</str>
     </lst>
</requestHandler>

スレーブ(検索サーバ)側はsolrconfig.xmlでマスタ側のサーバを指定すればよい。ここで、気にするべきパラメータはpollIntervalとhttpReadTimeoutあたりかな。上記の例では60秒間隔で更新の確認にいき、更新されていればインデックスをコピーしてくる。
あとは、Fessを起動すれば完了。という感じで、基本はsolrconfig.xmlを設定すればレプリケーション環境が簡単にできてしまう。

Fess 7.0.1を検討中

Fess 7をリリースして、次は7.1だー、と思っていたけど、現在、細かいバグがいくつかでてきたので、とりあえず、それらを直して、近いうちに7.0.1をリリースしようかと検討中。現状、使われている方はたぶん、webapps/fess/WEB-INF/classes/jpを置き換えればよいだけな感じかと思います。もう少し様子を見ながら対応します。

Fess 7をリリースしました

Fess 6 をリリースしてから5ヶ月ぶりくらいになりますが、Fess 7をリリースしました。まぁ、まだマニアックな使い方をする部分とかでドキュメントが一部追いついていないところもありますが…。Fess 7 では Solr 3.6.1 を採用しています。その他にも多くの改善がされていますが、まとめると以下のよう感じでしょうか。

  • ハイブリッドインデックス:Fess 7 では検索対象の言語を判定して、n-gram と形態素解析でインデックスを生成しています。そして、検索時の言語を取得して適切なインデックスに対して検索を実施します。
  • file:パス問題の解決:今までローカルファイルの検索については、Googleデスクトップ検索と同様な方法でデスクトップ検索を実現していましたが、近年、ブラウザのセキュリティがより厳しくなり、file://〜のURLが開くことができなくなっています。Fess 7ではこの問題を解決しています。
  • いいね機能:いいね(投票機能)をFess内で管理することができるようになり、その情報をもとにドキュメントをブーストすることができるようになりました。投票情報は拡張することなどが可能です。
  • 集計機能の改善:より細かく指定して検索情報を集計できるようになりました。
  • 差分クロールの改善:実装を整理して、クロールセッションごとに設定された有効期限で削除することができるようなりました。
  • デザイン機能の改善:ファイルアップロードや削除をサポートすることで、検索画面を柔軟にカスタマイズできるようになりました。

というような感じで、いろいろと改善されてます。file:問題は長い間苦しまされ続けてきていたので、Fess 7 でようやく解決な感じかと思います。
Solr 4.0 の前にリリースができれば、次は Fess 7.1 になると思いますが、そこでは管理 API を json などで呼べるようにしたいと考えています。まぁ、それ以外にも出てくるのかもしれませんが、引き続きよろしくお願いしますー。