Solr を導入

Solr を導入しました。インストール先のサーバに合わせたディレクトリ構成です。

このようなディレクトリ構成でインストールしていきます。

# ライブラリ本体(solr.war、jetty-*.jar、その他もろもろの jar 置き場所)
/usr/local/lib/solr-4.6.0

# シンボリックリンク
/usr/local/lib/solr -> /usr/local/lib/solr-4.6.0

# Solr Home ディレクトリ
/var/solr

# ログ(Solr Home からのデフォルト設定)
/var/solr/logs

# 各Solr コアのディレクトリ(Solr Home からのデフォルト設定)
/var/solr/solr/CORE_NAME

# コアごとのインデックスデータ(Solr Home からのデフォルト設定)
/var/solr/solr/YOUR_CORE_DIRECTORY/data

最新の Solr を落とします。24 November 2013 に 4.6.0 がリリースされたようです。

$ su -
$ cd /usr/local/lib
$ wget http://ftp.kddilabs.jp/infosystems/apache/lucene/solr/4.6.0/solr-4.6.0.tgz -O - | tar zxvf -
$ ln -s solr-4.6.0 solr

Solr の読み書き・実行は安全のため、root でなくに常に特定のユーザーにやらせます。ここでは www-data というユーザーを使います。

$ chown -R www-data:www-data solr solr-4.6.0

続いて、コアごとの設定ファイルを増やしていくためのディレクトリを用意します。

$ cd /var
$ mkdir solr

Solr のサンプルの中から、最もベーシックな設定例をコピーして利用します。

$ cp -R /usr/local/lib/solr-4.6.0/example/solr /var/solr/
$ chown -R www-data:www-data /var/solr
$ cd solr

コピーした設定では、collection1 というコアが 1個だけ宣言されています。まずはこれを起動してみます。

/var/solr/solr/collection1/conf/solrconfig.xml を編集し、ライブラリのパスを書き換えます。

75,76c75,76
<   <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/extraction/lib" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-cell-\d.*\.jar" />
78,79c78,79
<   <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/clustering/lib/" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-clustering-\d.*\.jar" />
81,82c81,82
<   <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/langid/lib/" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-langid-\d.*\.jar" />
84,85c84,85
<   <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/velocity/lib" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-velocity-\d.*\.jar" />

${solr.solr.lib} という変数は私が適当につけた変数で、あとで Jetty を起動するときに引数を与えることで値が入ります。

Jetty は tomcat のようなサーブレットコンテナの1つで、他のプロジェクトに埋め込みやすいのが特徴のようです。今回は Jetty も含め "Solr サーバ" として扱いたいと思います。

Solr をサービスとして起動するための service スクリプトを書きます。以下のスクリプトは http://stackoverflow.com/a/8189312/804314 を元に作りました。あくまで「Solr 付属の Jetty で Solr を起動する」という書き方になっています。適宜書き換えてご利用ください。

それでは起動します。

$ sudo service solr start

Webブラウザで http://localhost:8983/solr にアクセスし、管理画面を確認してください。

f:id:piglovesyou:20131125160554p:plain

左下のプルダウンから、宣言されているコアを選択することができます。

次に、コアを増やしてみます。既存のコアをフルコピーし、data フォルダを削除してください。

$ cd /var/solr/solr
$ cp -R collection1 yasai
$ rm -rf yasai/data  # 既存のデータが大きいと大変かも・・
$ vi core.properties       # コアの名前を変更します。

コアの名前を書き換えます。

1c1
< name=collection1
---
> name=yasai

Solr を再起動します。

$ sudo service solr restart

新しいコア yasai が確認できます。

f:id:piglovesyou:20131125161920p:plain

以上で、Solr でコアを増やしていく準備ができました。あとは使うアプリに従って、コアごとに主に schema.xmlスキーマ定義) 、 data-config.xml(データインポート時のカラム対応やSQLなど) をいじるだけです。

ところで、各コアのディレクトリ内に共通化できそうなファイルがたくさんあります。これを外に出す方法がわかりませんでした。もし知っている方がいたら教えてください。