差分クロールとロールベース検索まわりで不具合があったので、修正版として7.0.1をリリースしました。こちらからダウンロードすることができます。7.1系では管理機能をAPI化できればよいかなっと考えています。という感じで、引き続きよろしくお願いします。
カテゴリー: Fess
Fessを形態素解析サーバーとして利用する
まぁ、Fessというか、Solrの機能ですが、Solrはインデックスを作るときに文書を単語に分割します。その単語分割はインデックスを作成する以外でも呼び出すことはできるので、その紹介です。利用用途としては何かしらの文書を単語に分割すれば、名詞だけピックアップしてその文書にタグとしてつけたりとか、考えれば何かいろいろと出てくるでしょう(たぶん…)。そんな感じで、形態素解析をAPIで手っ取り早く利用したい場合には、Fessを利用すればあっという間に利用できます。
利用方法はFessをインストールします。手順は簡単なのでJavaがインストールされていれば、5分もかからないでしょう。そして、Fessを起動したら、たとえば、curlコマンドとかで
$ curl --basic --user solradmin:solradmin "http://localhost:8080/solr/core1/analysis/field?analysis.fieldtype=text_ja&analysis.fieldvalue=今日の天気は晴れです。"
とすれば、XMLでレスポンスが返ってきます。まぁ、確認するのにブラウザでそれにアクセスしても良いです(デフォルトでユーザー名solradmin、パスワードsolradmin)。普通の用途なら、JapaneseTokenizer要素以下を利用すれば良いかと思う。
analysis.fieldtypeを変えればいろいろな分割ができます。利用可能なフィールド型はここのfieldTypeタグのnameを利用してください。text_ja以外の日本語の形態素解析だと、text_gosenが利用可能かと。
という感じで、analysis.fieldvalueに分割したい文書を渡してあげれば良い。XML以外のフォーマットも返せるのでリクエストパラメータにwt=jsonとかすればjsonで返ってきます。
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を設定すればレプリケーション環境が簡単にできてしまう。