何かと検索の需要ってあるわけなんですが、その中でもオープンソースで 最もポピュラーなのは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)も話するんですね!エンジニア友達にも沢山会えそうです(^^)