日本語全文検索システムを、ChaSen と MySQL を使って、スコアの管理や形容詞等も検索できるように独自に作ってきましたが、検索エンジンだけでなく、Webサーバアプリケーションとして、Apache Solr や GETASsoc が公開されており興味がありましたが、なかなか手が出ませんでした。しかし、Apache Solr を試す機会がありましたので、構築メモをまとめました。
また、Apache Solr は、jetty で動作する example を、ダウンロードファイル内に設定されていますが、業務で使用する場合 tomcat での稼働が必要になってくると思い、tomcat での構築を行いました、
■ インストール前提
Apache Solr は、Java で稼働する Webシステムですので、以下のパッケージがインストールされている前提で進めます。
- java jdk (jdk-6u29-linux-i586.bin を使用)
- ant (apache-ant-1.8.2 を使用)
- tomcat (apache-tomcat-5.5.34 を使用)
また、上記パッケージのインストールディレクトリは、以下のディレクトリとして進めます。
- JAVA_HOME=/usr/local/java/
- CATALINA_HOME=/usr/local/tomcat
■ 今回ダウンロードしたファイル
以下の、ファイルをダウンロードし、インストールしました。
- mecab-0.98.tar.gz : 形態素解析エンジン
- mecab-naist-jdic-0.6.3b-20111013.tar.g : mecab辞書
- apache-solr-3.4.0.tgz : Apache Solr
- cmecab-1.7.tar.gz : MeCabをJavaから利用するためのライブラリ
- protobuf-2.4.1.tar.gz : cmecab で使用
- scons-2.1.0.tar.gz : cmecab で使用
ダウンロードファイルのバージョンは、読み替えて下さい。
■ MeCabのインストール
MeCab は、http://mecab.sourceforge.net/ からダウンロードして使用して下さい。
エンコードは、”UTF-8″を使用します。
$ cd mecab-0.98
$ ./configure –with-charset=utf8 –enable-utf8-only
$ make
# make install
■ MeCab用辞書のインストール
辞書は、から、「naist-jdic (for MeCab)」をダウンロードして下さい。
MeCabのエンコードと合わせて、辞書もUTF-8で作成します。
○ 展開・インストール
$ cd mecab-naist-jdic-0.6.3b-20111013
$ ./configure –with-charset=utf8
$ make
# make install
○ MeCabの定義ファイルを修正
/usr/local/etc/mecabrc ファイルの dicdir 指定を修正。
↓
dicdir = /usr/local/lib/mecab/dic/naist-jdic
○ 確認実行
MeCabのインストールおよび辞書の設定が正しいか、コマンド実行により確認します。
形態素解析する文章をテキストファイルに作成し、mecabコマンドを実行します。
下記のような解析結果が表示されれば、OKです。
% mecab hoge.txt
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ,,
形態素 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ,,
解析 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ,,
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
MeCab 名詞,一般,*,*,*,*,*
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
使用 名詞,サ変接続,*,*,*,*,使用,シヨウ,シヨー,,
EOS
■ Solrのインストール
Solrは、warファイルですので、makeの必要はありません。
圧縮ファイルを展開し、必要箇所にファイルをコピーするだけです。
○ 展開・インストール
$ cd apache-solr-3.4.0
$ cd example
$ su
# cp webapps/solr.war /usr/local/tomcat/webapps/
# cp -r solr /usr/local/
○ web.xmlの修正
2) tomcatを停止 ← tomcatは起動のままでも良いのですが、停止して作業。
3) web.xmlを修正 ← /usr/local/tomcat/webapps/solr/WEB-INF/web.xml
<!–
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
–>
—————
↓ コメントを外し、<env-entry-value> に solr をコピーしたディレクトリを指定します。
—————
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr</env-entry-value> ← 修正箇所
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
—————
○ Solr と Tomcat の動作確認
tomcat を起動し、http://localhost:8080/solr へアクセスします。
以下の画面が表示されれば、一応、tomcat 上でのSolr 稼働は確認 OK です。
■ cmecabのインストール
cmecabは、MeCabをJavaから利用するためのライブラリ群であり、Solrで MeCabを使う場合、必須です。
cmecabは、http://code.google.com/p/cmecab-java/からダウンロードして下さい。
○ 展開・ライブラリ作成
$ cd cmecab-1.7
$ ant
antの実行で、以下の jarが作成されます。
- ./bin/cmecab-1.7.jar
- ./lib/commons-logging-1.1.1.jar
- ./lib/protobuf-java-2.3.0.jar
- ./lib/sen.jar
○ ライブラリの配置
作成された jar を、/usr/local/tomcat/webapps/solr/WEB-INF/lib/ へコピーします。
注) jar ファイルを、solrのプラグインディレクトリ(/usr/local/solr/lib)へコピーという情報もありますが、class not found で動作しませんでした。
注) sen.jar は、今回使用しません。
# cp ./lib/*.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/
○ ネイティブライブラリの構築
$ vi SConstruct ← 環境に合わせる修正
$ scons
if env[‘PLATFORM’] == ‘sunos’:
javahome = ‘/usr/java’
incpath = [join(javahome, ‘include’),
join(javahome, ‘include’, ‘solaris’)]
else:
javahome = ‘/usr/lib/jvm/java-6-sun‘ ← 修正箇所 (Linuxの場合)
incpath = [join(javahome, ‘include’),
join(javahome, ‘include’, ‘linux’)]
—————
↓ javahome の指定を、環境に合わせる
—————
if env[‘PLATFORM’] == ‘sunos’:
javahome = ‘/usr/java’
incpath = [join(javahome, ‘include’),
join(javahome, ‘include’, ‘solaris’)]
else:
javahome = ‘/usr/local/java‘
incpath = [join(javahome, ‘include’),
join(javahome, ‘include’, ‘linux’)]
—————
scons の実行で、以下のライブラリが作成されます。
- libCMeCab.so
- libCMeCab_protobuf.so
作成されたライブラリを、/usr/local/lib へコピー
■ scons 実行のためのパッケージ追加インストール
私の環境で、protobuf と scons が入っていませんでしたので、ダウンロード/インストールしました。
○ protobuf のインストール
$ cd protobuf-2.4.1
$ ./configure
$ ./make
# make install
# /sbin/ldconfig
○ scons のインストール
$ cd scons-2.1.0
# python setup.py install
■ Solrの動作確認
○ schema.xml の修正
MeCabを使用する Tokenizer の、fieldType を追加します。
修正ファイルは、/usr/local/solr/conf/schema.xml です。
以下の定義は、MeCabを使用する最低限の指定です。
:
<!– MeCabを用いたTokenizer –>
<fieldType name=”text_mecab” class=”solr.TextField”>
<analyzer>
<tokenizer class=”net.moraleboost.solr.StandardMeCabTokenizerFactory” charset=”utf-8″ />
</analyzer>
</fieldType>
:
</types>
○ 環境設定
libCMeCab.so, libCMeCab_protobuf.so をコピーしたディレクトリを、環境変数 LD_LIBRARY_PATH に指定します。
もしくは
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
環境変数ではなく、tomcat 起動時の引数に、-Djava.library.path=/usr/local/lib の追加も可能です。
○ 実行・確認
tomcat を起動し、”http://localhost:8080/solr/” にアクセスすると、以下の画面が表示されます。
表示されなく、エラーメッセージが表示される場合は、ライブラリのパスに間違いがある可能性があります。
1) トップ画面に表示されている「Solr Admin」リンクをクリック
2) 管理画面が表示されますので、「ANALYSIS」リンクをクリック
3) MeCabの動作確認を行います。
- Filedの指定で「type」を選択します。
- Filedの入力エリアに、「text_mecab」を入力します。
text_mecabは、schema.xmlで指定した「fieldType name=”text_mecab” … 」のname値です。 - Field valueの入力エリアに、日本語文章を入力します。
- [Analyze]をクリック
4) 形態素解析の結果が表示されます。
5) Field value の[verbose output]にチェックし、[Analyze]をクリックすると、解析結果の詳細情報が表示されます。
■ 参考サイト
- Apache Solr http://lucene.apache.org/solr/
- cmecab-java http://code.google.com/p/cmecab-java/
- GETASsoc http://getassoc.cs.nii.ac.jp/
■ その他
Solrの使用方法については、別途、まとめたいと思います。