先日リリースされたSolr4.0と話題のSolrCloudを試してみる

何かと検索の需要ってあるわけなんですが、その中でもオープンソースで
最もポピュラーなのはApache Solr(http://lucene.apache.org/solr/)だと思います。
メジャーバージョンアップ版の4.0が出てたのは知ってたのですが
まだ試していませんでした。
 
↓を読んでたら居ても立ってもいられなくなってきたので、やってみましたw
強烈に素晴らしいプロダクトに変貌した Apache Solr – Solr 4.0 登場 | にょきにょきブログ
 
Solr3.6でKuromojiを試した時はTomcatを使いましたが、
今回は本家のチュートリアル↓に沿ってJettyでやってみます。
http://lucene.apache.org/solr/4_0_0/tutorial.html
 
■ Solrサーバーを起動

$ wget http://ftp.jaist.ac.jp/pub/apache/lucene/solr/4.0.0/apache-solr-4.0.0.tgz
$ tar xvf apache-solr-4.0.0.tgz
$ cd apache-solr-4.0.0/
apache-solr-4.0.0 $ cd example/
example $ java -jar start.jar
2012-10-31 16:12:14.794:INFO:oejs.Server:jetty-8.1.2.v20120308
~略~
INFO: SolrDispatchFilter.init() done
2012-10-31 16:12:17.756:INFO:oejs.AbstractConnector:Started SocketConnector@0.0.0.0:8983

 
■ Solrのディレクトリの構造
README.txtをみると、

* SolrHome *
By default, start.jar starts Solr in Jetty using the default Solr Home
directory of “./solr/”

って事なので、solrディレクトリに行ってみます。
そーすっとこんな感じになってて、

$ ls
bin collection1 README.txt solr.xml zoo.cfg

solr.xmlみてくと、いっちゃんシンプルなシングルコアになってるよん、と。
SolrCloudに関するコメントあるけど、それは後回しにするとして、
とりあえず↓のコアの設定こんな感じだよ的な。

<cores
 adminPath=”/admin/cores”
 defaultCoreName=”collection1″
 host=”${host:}”
 hostPort=”${jetty.port:}”
 hostContext=”${hostContext:}”
 zkClientTimeout=”${zkClientTimeout:15000}”>
 <core name=”collection1″ instanceDir=”collection1″ />
</cores>

あとは、これといってな感じですが、README.txtみると、SolrCloud使うなら
ZooKeeperがホゲホゲだぜ的な事が書いてあります。

When using SolrCloud using the embedded ZooKeeper option for Solr, it is
common to have a “zoo.cfg” file and “zoo_data” directories in the Solr Home
Directory. Please see the SolrCloud wiki page for more details…

  
■ Solr管理画面
8983ポートの管理画面にアクセスすると、、カッチョよくなってる!
Add Coreだと…?こんな事を管理画面から出来るのねん~
#あのイナタイ画面がもう見れないのかと思うと少し寂しいですけどw

 
他にも何かと高機能になってるぅ。。
 
■ Solrにインデクシング
↓それ用のサンプルXMLファイルも用意されてたりしますので、

$ ls *.xml
gb18030-example.xml  ipod_other.xml  manufacturers.xml  money.xml     monitor.xml  sd500.xml  utf8-example.xml
hd.xml               ipod_video.xml  mem.xml            monitor2.xml  mp500.xml    solr.xml   vidcard.xml

チュートリアルの要領でインデクシングしてみます。

$ java -jar post.jar *.xml
SimplePostTool version 1.5
Posting files to base url http://localhost:8983/solr/update using content-type application/xml..
POSTing file gb18030-example.xml
POSTing file hd.xml
POSTing file ipod_other.xml
POSTing file ipod_video.xml
POSTing file manufacturers.xml
POSTing file mem.xml
POSTing file money.xml
POSTing file monitor2.xml
POSTing file monitor.xml
POSTing file mp500.xml
POSTing file sd500.xml
POSTing file solr.xml
POSTing file utf8-example.xml
POSTing file vidcard.xml
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/update..

管理画面からみてもインデクシングされています。

クエリ画面の結果XMLは昔と同じ感じですね~
 
■ Solrからデータを削除
コミットをfalseにしてDELETEを叩いてみます。

java -Ddata=args -Dcommit=false -jar post.jar “<delete><id>SP2514N</id></delete>”

画面からはまだ検索できます。(numFound=”1″)

↓で強制的にコミット的なのが出来るみたいです。

$ java -jar post.jar –
SimplePostTool version 1.5
COMMITting Solr index changes to http://localhost:8983/solr/update..

画面からみると削除されていました。

後はソートしたり、ファセットとか、アレやコレやありますが、
今回はSolrCloudを試してみたいので、また今度。チュートリアルは以上です。
 
■ SolrCloud
いよいよSolrCloudって感じで、↓WikiのGetting Startedに沿って
一番シンプルなヤツを構築してみます。
http://wiki.apache.org/solr/SolrCloud
上記のチュートリアルで突っ込んだデータをファイルごと消して、

$ rm -r example/solr/collection1/data/*

シャーディング用に2つのインスタンス構成にするので、
それ用にごっそりコピります。

$ cp -r example example2

 
■ Shardのノードを起動
シャーディング用のパラメータを入れてインスタンスを起動します。

$ cd example
example $ java -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
2012-10-31 17:01:15.984:INFO:oejs.Server:jetty-8.1.2.v20120308

Dオプション達は以下のような感じ。
・zkRun:Solrに同梱されてるエンベデッドなZookeeperサーバーを起動
・bootstrap_confdir:./solr/collection1/confの方を見るように(./solr/confではなく)
・numShards:シャードのノード数を指定
 
↓でクラスタの状況が見れます(the zookeeper distributed filesystem)
http://localhost:8983/solr/#/~cloud
2ノードじゃ殺風景っていうのと、2ノード目を上げてないので↓こんな感じ。

 
ということで、もう1ノードも立ち上げます。
Dオプションでポートが被らないようにって感じ。

$ cd ../example2/
example2 $ java -Djetty.port=7574 -DzkHost=localhost:9983 -jar start.jar
2012-10-31 17:12:11.923:INFO:oejs.Server:jetty-8.1.2.v20120308

↓画面みるとイイ感じ。

 
■ クラスタにデータを投入

$ java -Durl=http://localhost:8983/solr/collection1/update -jar post.jar *.xml
SimplePostTool version 1.5
Posting files to base url http://localhost:8983/solr/collection1/update using content-type application/xml..
POSTing file gb18030-example.xml
POSTing file hd.xml
POSTing file ipod_other.xml
POSTing file ipod_video.xml
POSTing file manufacturers.xml
POSTing file mem.xml
POSTing file money.xml
POSTing file monitor2.xml
POSTing file monitor.xml
POSTing file mp500.xml
POSTing file sd500.xml
POSTing file solr.xml
POSTing file utf8-example.xml
POSTing file vidcard.xml
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/collection1/update..

 
■ クラスタからデータを取得 
↓で32件取れるわけですが、、
http://localhost:8983/solr/collection1/select?q=*:*
 
・インスタンス1には14件

 
・インスタンス2には18件

 
てな感じで合計32件になってるわけですねん。
 
■ 最後に、、
んま、先日MongoDBのSharding試してチャンクの移動とかやりましたが、
そういうのどーなのー?は置いておいて、サクっとお手軽にShard出来そうなのは理解できました。
 
尚、SolrCloudのGettingStartedの続きは、
・上記それぞれのノードにバックアップ的なノードを立ててフェールオーバーするぜーってのと、
・ZooKeeperサーバーの可用性をもっとあげましょうってのが記載されています。
どっかで時間見つけてやりましょかね。
 
ってか、日本語で最新版のSolrをターゲットにしたSolr本欲しいな…。
 
んま、何はともあれ、来月のSolr勉強会(http://atnd.org/events/33718)楽しみっす!#SolrJP
#兼山君(@penguinana_)も話するんですね!エンジニア友達にも沢山会えそうです(^_^)
 

Apache Solr入門 ―オープンソース全文検索エンジン
関口 宏司 三部 靖夫 武田 光平 中野 猛 大谷 純
技術評論社
売り上げランキング: 97244

コメント

  1. […] ↓のブログ書いたの最後カモ的な感じで、 先日リリースされたSolr4.0と話題のSolrCloudを試してみる | shinodogg.com […]

タイトルとURLをコピーしました