人生の恥は書き捨て

プログラムとかいろいろ

Apache Solrのインストール

はじめに

Apache Solrのインストールについてです。

Solrは便利な全文検索システムです。
様々な機能があって、サイト内検索などに便利です。
フリーワード検索、類似語検索などが高速に行えます。

Solrのインストール

Solrはjavaで動いているので、javaを入れます。

yum install java-1.7.0-openjdk.x86_64

yum install java-1.7.0-openjdk-devel.x86_64

yum install ant.x86_64

次に、Solrをダウンロードします。

wget http://ftp.riken.jp/net/apache/lucene/solr/4.9.0/solr-4.9.0.tgz

tar xzf solr-4.9.0.tgz

ダウンロードしたファイル内に、サンプルのファイルがあるので、実行します。

cd solr-4.9.0/example

java -jar start.jar

これで起動が確認できます。

f:id:kazuhei0108:20140713000225p:plain


コマンドの設定

便利に使うために、
solrをserviceとして登録して、
service solr startというふうに呼び出せるようにします。


起動用のスクリプトを/etc/init.d/solr として作成します。

  1 #!/bin/sh
  2 # chkconfig: 345 90 90
  3 # description: Solr Boot
  4 JETTY_HOME_DIR=/usr/local/solr/example/
  5 cd $JETTY_HOME_DIR
  6 JAVA="/usr/bin/java"
  7 LOG_FILE="/var/log/solr.log"
  8 
  9 KEY=stopkey
 10 CORE=solr
 11 cd $JETTY_HOME_DIR
 12 start() {
 13   $JAVA -Dsolr.solr.home=${JETTY_HOME_DIR}${CORE} -DSTOP.PORT=8079 -DSTOP.KEY=$KEY -jar start.jar >> $LOG_FILE 2>&1 &
 14   echo "Solr started!"
 15 }
 16 
 17 stop() {
 18   $JAVA -DSTOP.PORT=8079 -DSTOP.KEY=$KEY -jar start.jar --stop
 19   echo "Solr stopped!"
 20 }
 21 
 22 case "$1" in
 23     start)
 24         start
 25         ;;
 26     stop)
 27         stop
 28         ;;
 29     restart)
 30       stop
 31       start
 32       ;;
 33     *)
 34       echo "Usage: $0 {start|stop|restart}"
 35       exit 1
 36 esac

4行目のJETTY_HOME_DIRはsolrをインストールした場所を指定してください。
僕はusr/local/に解凍したフォルダをsolrという名前に変更して配置したのでこのようになっています。


solrは停止するときに、起動時とは違うポートを指定する必要があります。
solrの起動時のdefaultのポートは8983になっていて、停止時のポートは今回8079にしています。

ここまでできたら、

chkconfig --add solr

でsolrをserviceに登録できます。

chkconfig solr on
service solr start

自動起動とserviceコマンドからの起動ができます。

solrを使ってみる

solrのデータ登録と検索を簡単に試してみます。

データの登録

登録するためのxmlファイルを用意します。

lovelive.xml

<add>
    <doc>
        <field name="id">1</field>
        <field name="name">Honoka Kosaka</field>
    </doc>
    <doc>
        <field name="id">2</field>
        <field name="name">Umi Sonoda</field>
    </doc>
    ・
    ・
    ・
    <doc>
        <field name="id">7</field>
        <field name="name">Nico Yazawa</field>
    </doc>
    <doc>
        <field name="id">8</field>
        <field name="name">Eri Ayase</field>
    </doc>
    <doc>
        <field name="id">9</field>
        <field name="name">Nozomi Tojo</field>
    </doc>
</add>

そして、このファイルをsolrに向かってpostします。

curl 'http://localhost:8983/solr/collection1/update?commit=true&indent=true' --data-binary @lovelive.xml -H 'Content-Type: text/xml'

これでデータが登録されます。

solrではデータをsolrに渡して、それをcommitすることで初めて検索ができるようになります。
solrのcommitは時間がかかるので、普通は複数のデータをsolrに渡してからcommitで一度に書き込みます。
今回はcommit=trueとして、データ渡しとcommitを両方行っています。

データの検索

さっき登録したデータからNicoという言葉を検索します。

curl "http://localhost:8983/solr/collection1/select?q=Nico&wt=json&indent=true"

形式はjsonを指定しています。
f:id:kazuhei0108:20140713005550p:plain
ちゃんと検索出来ました。