Apache Solr + MeCab + Tomcat の構築

日本語全文検索システムを、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″を使用します。

$ tar zxf mecab-0.98.tar.gz
$ cd mecab-0.98
$ ./configure –with-charset=utf8 –enable-utf8-only
$ make
# make install

■ MeCab用辞書のインストール

辞書は、から、「naist-jdic (for MeCab)」をダウンロードして下さい。
MeCabのエンコードと合わせて、辞書もUTF-8で作成します。

○ 展開・インストール

$ tar zxf mecab-naist-jdic-0.6.3b-20111013.tar.gz
$ 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/ipadic
        ↓
dicdir = /usr/local/lib/mecab/dic/naist-jdic

○ 確認実行

MeCabのインストールおよび辞書の設定が正しいか、コマンド実行により確認します。
形態素解析する文章をテキストファイルに作成し、mecabコマンドを実行します。
下記のような解析結果が表示されれば、OKです。

% echo “日本語形態素解析にMeCabを使用” > hoge.txt
% mecab hoge.txt
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ,,
形態素 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ,,
解析 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ,,
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
MeCab 名詞,一般,*,*,*,*,*
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
使用 名詞,サ変接続,*,*,*,*,使用,シヨウ,シヨー,,
EOS

■ Solrのインストール

Solrは、warファイルですので、makeの必要はありません。
圧縮ファイルを展開し、必要箇所にファイルをコピーするだけです。

○ 展開・インストール

$ tar zxf apache-solr-3.4.0.tgz
$ cd apache-solr-3.4.0
$ cd example
$ su
# cp webapps/solr.war /usr/local/tomcat/webapps/
# cp -r solr /usr/local/

○ web.xmlの修正

1) tomcatを再起動 ← solr.war を展開するために、一旦再起動します。
2) tomcatを停止  ← tomcatは起動のままでも良いのですが、停止して作業。
3) web.xmlを修正 ← /usr/local/tomcat/webapps/solr/WEB-INF/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 です。

Solrトップ画面

■ cmecabのインストール

cmecabは、MeCabをJavaから利用するためのライブラリ群であり、Solrで MeCabを使う場合、必須です。
cmecabは、http://code.google.com/p/cmecab-java/からダウンロードして下さい。

○ 展開・ライブラリ作成

$ tar zxf cmecab-1.7.tar.gz
$ 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 ./bin/cmecab-1.7.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/
# cp ./lib/*.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/

○ ネイティブライブラリの構築

$ cd jni
$ vi SConstruct ← 環境に合わせる修正
$ scons
—– SConstruct の編集 37行目辺り —–
 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 へコピー

# cp *.so /usr/local/lib

■ scons 実行のためのパッケージ追加インストール

私の環境で、protobuf と scons が入っていませんでしたので、ダウンロード/インストールしました。

○ protobuf のインストール

$ tar zxvf protobuf-2.4.1.tar.gz
$ cd protobuf-2.4.1
$ ./configure
$ ./make
# make install
# /sbin/ldconfig

○ scons のインストール

$ tar zxvf scons-2.1.0.tar.gz
$ cd scons-2.1.0
# python setup.py install

■ Solrの動作確認

○ schema.xml の修正

MeCabを使用する Tokenizer の、fieldType を追加します。
修正ファイルは、/usr/local/solr/conf/schema.xml です。
以下の定義は、MeCabを使用する最低限の指定です。

<types>
  :
<!– 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
もしくは
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

環境変数ではなく、tomcat 起動時の引数に、-Djava.library.path=/usr/local/lib の追加も可能です。

○ 実行・確認

tomcat を起動し、”http://localhost:8080/solr/&#8221; にアクセスすると、以下の画面が表示されます。
表示されなく、エラーメッセージが表示される場合は、ライブラリのパスに間違いがある可能性があります。

1) トップ画面に表示されている「Solr Admin」リンクをクリック
Solrトップ画面

2) 管理画面が表示されますので、「ANALYSIS」リンクをクリック
Solr管理画面

3) MeCabの動作確認を行います。

  • Filedの指定で「type」を選択します。
  • Filedの入力エリアに、「text_mecab」を入力します。
    text_mecabは、schema.xmlで指定した「fieldType name=”text_mecab” … 」のname値です。
  • Field valueの入力エリアに、日本語文章を入力します。
  • [Analyze]をクリック

Solrタイプ解析画面

4) 形態素解析の結果が表示されます。
Solr解析結果画面-1

5) Field value の[verbose output]にチェックし、[Analyze]をクリックすると、解析結果の詳細情報が表示されます。
Solr解析結果画面-2

■ 参考サイト

■ その他

Solrの使用方法については、別途、まとめたいと思います。

コメントを残す