Apache Solrをマルチコアに対応させる | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

前回「Apache Solrのデモ環境を作ってみる 」にてApache Solrへのデータの取り込みをしてみましたが、Apache Solrはマルチコアに対応しており、複数のデータベースを作ることが可能です。

例えば、本番用とテスト用のコアを作って別々に管理したり、検索対象のアイテムによってコアを分けて検索結果を別々にするということが可能になります。



Apache Solrにコアを追加する


コアの追加方法は管理サイトから簡単に可能そうなのですが、この機能だけではどうもうまく動作してくれません。

下図のように「Core Admin」メニューの「Add Core」から追加しようとすると


Error CREATEing SolrCore 'new_core': Unable to create core: new_core

とエラーがでて作成できません。


A Day In The Boy's Life-ApacheSolrのコアの追加


そもそもの仕様ではありそうなのですが、一部の操作をサーバー上で手動で行う必要があります。

まず、Solrのコア用のディレクトリに移動し、既存でうまく動作しているコアディレクトリをコピーします。


$ cd /path/to/solr/example/solr/
$ cp -r collection1 new_core/

次に、追加したコアディレクトリ(new_core)の設定ファイル(conf/schema.xml)や辞書ファイル(conf/lang/userdict_ja.txtやconf/synonyms.txtなど)を編集します(これはコアの動作確認が取れた後でも問題ありませんが)


次に、コピーしたコアディレクトリにデータが入っている場合は、データをクリアしておきます。

Apache Solrのデータの削除(クリア)方法は、dataディレクトリの中身を削除するだけです。


$ cd /path/to/solr/example/solr/new_core/data
$ rm -rf ./*

これで再度Apache Solr管理画面から「Add Core」でコアを追加すればうまく登録できます。

登録後は、Apache Solrを再起動させます。


実は、ここまでやったらApache Solr管理サイトを使わずとも全て手動で作業もできたりもします。

コアディレクトリをコピーした後(データファイルの削除後でもいいですが)、solr.xmlを編集して新しいコアの情報を追加することでもコアの登録が行えます。


# cd /path/to/solr/example/solr
# vi solr.xml

以下のように新しいコアの情報(new_coreの箇所)を追加します。


<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
  <cores defaultCoreName="collection1" adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:15000}" hostPort="8983" hostContext="solr">
    <core schema="schema.xml" loadOnStartup="true" instanceDir="collection1/" transient="false" name="collection1" config="solrconfig.xml" dataDir="data"/>
    <core schema="schema.xml" loadOnStartup="true" instanceDir="new_core/" transient="false" name="new_core" config="solrconfig.xml" dataDir="data"/>
  </cores>
</solr>

solr.xmlファイルの編集後にApache Solrを再起動させCore Adminメニューを見てみると新しいコアが追加されているはずです。



Apache Solrのコアを削除する


コアの追加をするんだったら、コアの削除方法も覚えておかなくてはなりません。

コアの削除は、追加手順を逆順で実施するだけで問題ありません。


まず、管理サイト上のCore Adminメニューから該当のコア名を選択し、Unloadボタンをクリックします。
そのまま「OK」ボタンをクリックすると該当のコア情報が削除されます。

ただし、これもsolr.xmlファイルからこのコアの情報が削られるだけなのでデータファイルなどのコアディレクトリは残ったままです。

あとは、サーバー上でコアディレクトリを削除します。


$ cd /path/to/solr/example/solr/
$ rm -rf ./new_core

順番を間違えて先にコアディレクトリを削除してしまうと、下記のように管理サイト上でエラーが出てしまいます。


new_core: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load config for solrconfig.xml

この回避方法は、solr.xmlファイル上に残っている該当のコア情報を手動で削除するか、または再度追加してSolrに正しく認識させることです。

あとは、手順を正しくリトライしましょう。