hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

Apache Solrをインストールしてみる

会社の人から「Apache Solr」というものを教えてもらったので、試しにCentOSにインストールしてみました。

Apache Solr」とは?

Solr は「ソーラ」と読むみたいです。Wikipedia によると

全文検索エンジンライブラリLuceneをベースに、管理画面やキャッシュ機構を取り入れたアプリケーション。

http://ja.wikipedia.org/wiki/Solr

という全文検索系のエンジンみたいです。

とりあえずインストールしてみる

なにはともあれ、まずはインストールをしてみます。

Java をインストール

Solr は Java ベースのアプリケーションになるので、事前に Java をインストールしておきます。
※大抵の場合、Java はインストール済みだと思うのでここはパスしても良いです。

$ yum install java
$ java -version
java version "1.6.0_17"
OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-i386)
OpenJDK Client VM (build 14.0-b16, mixed mode)
Apache Solr をインストール

Java がインストールが完了したら、次に Solr をインストールします。
Solr のインストールはアーカイブをダウンロードして解凍するだけでOKです。

Solr は以下からダウンロードができます。
Apache Download Mirrors

今回は wget で zipファイルをダウンロードして、解凍しました。

$ wget http://ftp.riken.jp/net/apache//lucene/solr/1.4.1/apache-solr-1.4.1.zip
$ unzip apache-solr-1.4.1.zip

とりあえず Solr を起動してみる

解凍まで完了したら、さっそく Solr を起動させてみます。
「apache-solr-1.4.1/example」以下にあるサンプルを起動させてみます。
起動には「start.jar」を使います。

$ cd apache-solr-1.4.1/example
$ java -jar start.jar
2011-02-05 08:30:36.501::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2011-02-05 08:30:36.656::INFO:  jetty-6.1.3
...
情報: SolrUpdateServlet.init() done
2011/02/05 8:30:38 org.apache.solr.core.QuerySenderListener newSearcher
情報: QuerySenderListener sending requests to Searcher@ed32c4 main
2011-02-05 08:30:38.480::INFO:  Started SocketConnector @ 0.0.0.0:8983

正常に起動ができたら、http://localhost:8983/solr/admin/ へアクセスして以下のようなページが表示されたらOKです。
f:id:mrgoofy33:20110205002702p:image:w300

(補足) ポートの開放が必要な場合

上記のように Solr を起動した場合、ポート番号「8983」を使用します。
ポートが閉じられている場合、「8983」を開放してアクセスできるようにします。
ポートの開放には「system-config-securitylevel-tui」を使用します。

$ su - root
パスワード:
# system-config-securitylevel-tui 

「カスタマイズ」を選択して、「その他ポート」に「8983:tcp」を指定します。
f:id:mrgoofy33:20110205002700p:image:w300:left
f:id:mrgoofy33:20110205002701p:image:w300

とりあえず Solr にデータ登録してみる

Solr の起動が正常に完了したら、次に検索用のデータを登録してみます。
「apache-solr-1.4.1/example/exampledocs」以下にサンプルデータのxmlがあるので、今回はこの中から「ipod_other.xml」を登録してみます。
データの登録には「example/exampledocs/post.jar」を使用します。

$ cd /[solr-path]/apache-solr-1.4.1/example
$ java -jar exampledocs/post.jar exampledocs/ipod_other.xml
SimplePostTool: version 1.2
SimplePostTool: WARNING: Make sure your XML documents are encoded in UTF-8, other encodings are not currently supported
SimplePostTool: POSTing files to http://localhost:8983/solr/update..
SimplePostTool: POSTing file ipod_other.xml
SimplePostTool: COMMITting Solr index changes..

とりあえず管理ページから検索してみる

データ登録まで完了したら、http://localhost:8983/solr/admin/ へアクセスして管理ページの「Query String」に「weight:4」と入力して「Search」をクリックします。
f:id:mrgoofy33:20110205002703p:image:w300
すると、以下のように検索結果が xml 形式で表示されます。
f:id:mrgoofy33:20110205002705p:image:w300
xml 全体はこんな感じです。

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
<lst name="responseHeader"> 
 <int name="status">0</int> 
 <int name="QTime">8</int> 
 <lst name="params"> 
  <str name="indent">on</str> 
  <str name="start">0</str> 
  <str name="q">weight:4</str> 
  <str name="version">2.2</str> 
  <str name="rows">10</str> 
 </lst> 
</lst> 
<result name="response" numFound="1" start="0"> 
 <doc> 
  <arr name="cat"><str>electronics</str><str>connector</str></arr> 
  <arr name="features"><str>car power adapter, white</str></arr> 
  <str name="id">F8V7067-APL-KIT</str> 
  <bool name="inStock">false</bool> 
  <str name="manu">Belkin</str> 
  <date name="manufacturedate_dt">2005-08-01T16:30:25Z</date> 
  <str name="name">Belkin Mobile Power Cord for iPod w/ Dock</str> 
  <int name="popularity">1</int> 
  <float name="price">19.95</float> 
  <float name="weight">4.0</float> 
 </doc> 
</result> 
</response> 

とりあえず、今回はここまで。
正直、動作させてみただけなので、内部構造とかは良く解っていません。
tomcatとかPHPとの連携もできるみたいなので、気が向いたらやってみます。

今回参考にしたページ

PHPApache Solr によるエンタープライズ検索
http://www.ibm.com/developerworks/jp/opensource/library/os-php-apachesolr/

自宅サーバの道しるべ【ポート設定(ファイアウォール)】
http://my-server.homelinux.com/port_firewall.php