CLOVER🍀

That was when it all began.

Apache Solr 5.3.0をインストールする

最近、Apache Solrを使うことになりそうなので、ちょっと勉強してみようかと。

Apache Solr
http://lucene.apache.org/solr/

完全に初めて、とは言えませんが、限りなくそれに近い状態でApache Solrを使います。

Quick Startを参考にして、進めていってみましょう。

Solr Quick Start
http://lucene.apache.org/solr/quickstart.html

インストール

まずは、インストールからですね。

ダウンロード、展開。

$ wget http://ftp.tsukuba.wide.ad.jp/software/apache//lucene/solr/5.3.0/solr-5.3.0.tgz
$ tar -zxvf solr-5.3.0.tgz

ディレクトリを移動。

$ cd solr-5.3.0

Solrの操作には、以下のスクリプトを使用すればよいみたいです。

$ bin/solr

Usage: solr COMMAND OPTIONS
       where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete

  Standalone server example (start Solr running in the background on port 8984):

    ./solr start -p 8984

  SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to ZooKeeper, with 1g max heap size and remote Java debug options enabled):

    ./solr start -c -m 1g -z localhost:2181 -a "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044"

Pass -help after any COMMAND to see command-specific usage information,
  such as:    ./solr start -help or ./solr stop -help

コマンドに対して「-help」を付与することで、ヘルプを見ることができます。

$ bin/solr start -help

Solrを起動する

それでは、Solrを起動してみます。

Quick Startでは「-e cloud」付きで起動していますが、これはSolrCloudのサンプルを使って起動するものみたいです。

というわけで、まずは普通に起動してみます。

$ bin/solr start
NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=353). Happy searching!

起動したようです。

Quick Startでは「-noprompt」というオプションが付いていますが、これはSolrCloudなどのサンプルを使用する場合に、対話形式とならないようにするものです。普通に「solr start」とする分には、意味がなさそうな模様。

なお、ちょっとビックリしたのは、Solr 5ではTomcatなどのServletコンテナへのデプロイは、サポートしなくなったようです。
※solr.warがない

No Longer Supported
Beginning with Solr 5.0, Support for deploying Solr as a WAR in servlet containers like Tomcat is no longer supported.

For information on how to install Solr as a standalone server, please see Installing Solr.

https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+Tomcat

知らなかった…。

今はJettyを組み込んでいて、Solr自身がスタンドアロンなサーバーとして動作するようです。

Solrの停止

停止は、以下のコマンドで。

$ bin/solr stop
Sending stop command to Solr running on port 8983 ... waiting 5 seconds to allow Jetty process 353 to stop gracefully.

管理画面を見てみる

もう1度Solrを起動。

$ bin/solr start

この時に、「http://localhost:8983/」にアクセスすると、Solrの管理画面が見れます。
※すぐさま、「http://localhost:8983/solr/#/」に移動させられますが

管理画面は、Solr 3の頃しか知らないのですが、だいぶ雰囲気変わりましたねぇ…。

サービスとしてインストールする

スタンドアロンなサーバーとなったSolrですが、サービスとして組み込むための、initスクリプトが付属するようになったみたいです。
「bin/install_solr_service.sh」というスクリプトです。

このスクリプトを、アーカイブから取り出します。

# tar -zxvf solr-5.3.0.tgz solr-5.3.0/bin/install_solr_service.sh

ちなみに、基本的にこの一連のコマンドの操作はrootで行います。

この「bin/install_solr_service.sh」の引数に、Solrのアーカイブを指定して実行します。

# solr-5.3.0/bin/install_solr_service.sh solr-5.3.0.tgz

すると、solrユーザーが作られ、アーカイブが展開され、サービスとしてSolrがインストールされます。

id: solr: no such user
Creating new user: solr
Adding system user `solr' (UID 102) ...
Adding new group `solr' (GID 105) ...
Adding new user `solr' (UID 102) with group `solr' ...
Creating home directory `/home/solr' ...
Extracting solr-5.3.0.tgz to /opt
Creating /etc/init.d/solr script ...
 Adding system startup for /etc/init.d/solr ...
   /etc/rc0.d/K20solr -> ../init.d/solr
   /etc/rc1.d/K20solr -> ../init.d/solr
   /etc/rc6.d/K20solr -> ../init.d/solr
   /etc/rc2.d/S20solr -> ../init.d/solr
   /etc/rc3.d/S20solr -> ../init.d/solr
   /etc/rc4.d/S20solr -> ../init.d/solr
   /etc/rc5.d/S20solr -> ../init.d/solr
NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=124). Happy searching!


Found 1 Solr nodes: 

Solr process 124 running on port 8983
{
  "solr_home":"/var/solr/data/",
  "version":"5.3.0 1696229 - noble - 2015-08-17 17:10:43",
  "startTime":"2015-09-05T13:55:47.712Z",
  "uptime":"0 days, 0 hours, 0 minutes, 15 seconds",
  "memory":"76.1 MB (%15.5) of 490.7 MB"}

Service solr installed.

この時点で、Solrが起動しています。

# service solr status

Found 1 Solr nodes: 

Solr process 124 running on port 8983
{
  "solr_home":"/var/solr/data/",
  "version":"5.3.0 1696229 - noble - 2015-08-17 17:10:43",
  "startTime":"2015-09-05T13:55:47.712Z",
  "uptime":"0 days, 0 hours, 0 minutes, 54 seconds",
  "memory":"82.4 MB (%16.8) of 490.7 MB"}

停止。

# service solr stop
Sending stop command to Solr running on port 8983 ... waiting 5 seconds to allow Jetty process 124 to stop gracefully.

起動。

# service solr start
NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=503). Happy searching!

…よく見ると、「lsof」入れた方がいいって言ってますね…。

lsofインストール後にもう1度起動すると、こんな感じになりました。

# service solr start
Waiting up to 30 seconds to see Solr running on port 8983 [\]  Still not seeing Solr listening on 8983 after 30 seconds!
2015-09-05 13:58:20.415 INFO  (main) [   ] o.e.j.u.log Logging initialized @265ms
2015-09-05 13:58:20.554 INFO  (main) [   ] o.e.j.s.Server jetty-9.2.11.v20150529
2015-09-05 13:58:20.568 WARN  (main) [   ] o.e.j.s.h.RequestLogHandler !RequestLog
2015-09-05 13:58:20.570 INFO  (main) [   ] o.e.j.d.p.ScanningAppProvider Deployment monitor [file:/opt/solr-5.3.0/server/contexts/] at interval 0
2015-09-05 13:58:21.584 INFO  (main) [   ] o.e.j.w.StandardDescriptorProcessor NO JSP Support for /solr, did not find org.apache.jasper.servlet.JspServlet
2015-09-05 13:58:21.597 WARN  (main) [   ] o.e.j.s.SecurityHandler ServletContext@o.e.j.w.WebAppContext@e25b2fe{/solr,file:/opt/solr-5.3.0/server/solr-webapp/webapp/,STARTING}{/opt/solr-5.3.0/server/solr-webapp/webapp} has uncovered http methods for path: /
2015-09-05 13:58:21.603 INFO  (main) [   ] o.a.s.s.SolrDispatchFilter SolrDispatchFilter.init(): WebAppClassLoader=117244645@6fd02e5
2015-09-05 13:58:21.615 INFO  (main) [   ] o.a.s.c.SolrResourceLoader JNDI not configured for solr (NoInitialContextEx)
2015-09-05 13:58:21.617 INFO  (main) [   ] o.a.s.c.SolrResourceLoader using system property solr.solr.home: /var/solr/data
2015-09-05 13:58:21.619 INFO  (main) [   ] o.a.s.c.SolrResourceLoader new SolrResourceLoader for directory: '/var/solr/data/'
2015-09-05 13:58:21.748 INFO  (main) [   ] o.a.s.c.SolrXmlConfig Loading container configuration from /var/solr/data/solr.xml
2015-09-05 13:58:21.802 INFO  (main) [   ] o.a.s.c.CoresLocator Config-defined core root directory: /var/solr/data
2015-09-05 13:58:21.821 INFO  (main) [   ] o.a.s.c.CoreContainer New CoreContainer 576020159
2015-09-05 13:58:21.821 INFO  (main) [   ] o.a.s.c.CoreContainer Loading cores into CoreContainer [instanceDir=/var/solr/data/]
2015-09-05 13:58:21.821 INFO  (main) [   ] o.a.s.c.CoreContainer loading shared library: /var/solr/data/lib
2015-09-05 13:58:21.821 WARN  (main) [   ] o.a.s.c.SolrResourceLoader Can't find (or read) directory to add to classloader: lib (resolved as: /var/solr/data/lib).
2015-09-05 13:58:21.835 INFO  (main) [   ] o.a.s.h.c.HttpShardHandlerFactory created with socketTimeout : 600000,connTimeout : 60000,maxConnectionsPerHost : 20,maxConnections : 10000,corePoolSize : 0,maximumPoolSize : 2147483647,maxThreadIdleTime : 5,sizeOfQueue : -1,fairnessPolicy : false,useRetries : false,
2015-09-05 13:58:22.059 INFO  (main) [   ] o.a.s.u.UpdateShardHandler Creating UpdateShardHandler HTTP client with params: socketTimeout=600000&connTimeout=60000&retry=true
2015-09-05 13:58:22.062 INFO  (main) [   ] o.a.s.l.LogWatcher SLF4J impl is org.slf4j.impl.Log4jLoggerFactory
2015-09-05 13:58:22.062 INFO  (main) [   ] o.a.s.l.LogWatcher Registering Log Listener [Log4j (org.slf4j.impl.Log4jLoggerFactory)]
2015-09-05 13:58:22.064 INFO  (main) [   ] o.a.s.c.CoreContainer Security conf doesn't exist. Skipping setup for authorization module.
2015-09-05 13:58:22.064 INFO  (main) [   ] o.a.s.c.CoreContainer No authentication plugin used.
2015-09-05 13:58:22.092 INFO  (main) [   ] o.a.s.c.CoresLocator Looking for core definitions underneath /var/solr/data
2015-09-05 13:58:22.093 INFO  (main) [   ] o.a.s.c.CoresLocator Found 0 core definitions
2015-09-05 13:58:22.101 INFO  (main) [   ] o.a.s.s.SolrDispatchFilter user.dir=/opt/solr-5.3.0/server
2015-09-05 13:58:22.101 INFO  (main) [   ] o.a.s.s.SolrDispatchFilter SolrDispatchFilter.init() done
2015-09-05 13:58:22.111 INFO  (main) [   ] o.e.j.s.h.ContextHandler Started o.e.j.w.WebAppContext@e25b2fe{/solr,file:/opt/solr-5.3.0/server/solr-webapp/webapp/,AVAILABLE}{/opt/solr-5.3.0/server/solr-webapp/webapp}
2015-09-05 13:58:22.123 INFO  (main) [   ] o.e.j.s.ServerConnector Started ServerConnector@46d95499{HTTP/1.1}{0.0.0.0:8983}
2015-09-05 13:58:22.123 INFO  (main) [   ] o.e.j.s.Server Started @1975ms

なお、「bin/install_solr_service.sh」スクリプトには引数をつけることができ、

  • -d … ログ、インデックスなどを保存するディレクトリ(デフォルト:/var/solr)
  • -i … Solrのアーカイブを展開するディレクトリ(デフォルト:/opt/)
  • -p … Solrが使用するポート(デフォルト:8983)
  • -s … サービス名(デフォルト:solr)
  • -u … Solrのファイルやプロセスのユーザー(デフォルト:solr)

となります。

つまり、先ほどのスクリプトに明示的にデフォルト値を付与すると、以下のようになるわけですね。

# solr-5.3.0/bin/install_solr_service.sh solr-5.3.0.tgz -d /var/solr -i /opt/ -p 8983 -s solr -u solr

参考)
Solr 5.0 リリース!
http://blog.yoslab.com/entry/2015/02/25/031002

Lucene 5.0 に対応した Apache Solr 5.0 がリリースされてた
http://qiita.com/ma2saka/items/d13787b0582b4116b0b5

Apache Solr 5.x を使った検索システムの構築
http://alpha-netzilla.blogspot.jp/2015/06/solr.html

Solr 5.1をCentOS 7上で動かしてみる
http://open-groove.net/solr/solr5-on-centos7/

オマケ

サービスとしてインストールするとこまでのDockerfileを作っておいたので、興味があれば。
Dockerfile

FROM ubuntu:latest

ENV JAVA_HOME /usr/lib/jvm/java-8-oracle

ENV SOLR_VERSION 5.3.0
ENV SOLR_ARCHIVE solr-${SOLR_VERSION}.tgz

ENV SOLR_INSTALL_DIR /opt
ENV SOLR_DATA_DIR /var/solr
ENV SOLR_PORT 8983

## Oracle JDK 8インストール
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
    apt-get install -y software-properties-common && \
    add-apt-repository -y ppa:webupd8team/java && \
    apt-get update && \
    apt-get install -y oracle-java8-installer

## ツールインストール
RUN apt-get install -y lsof \
                       curl \
                       vim

## 日本語環境サポート
RUN apt-get install -y language-pack-ja-base \
                       language-pack-ja \
                       ibus-mozc \
                       man \
                       manpages-ja && \
    update-locale LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja

ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
ENV LC_CTYPE ja_JP.UTF-8

## Solrインストール
RUN wget -q http://ftp.jaist.ac.jp/pub/apache//lucene/solr/${SOLR_VERSION}/${SOLR_ARCHIVE} && \
    tar -zxvf ${SOLR_ARCHIVE} solr-${SOLR_VERSION}/bin/install_solr_service.sh && \
    solr-${SOLR_VERSION}/bin/install_solr_service.sh ${SOLR_ARCHIVE} -i ${SOLR_INSTALL_DIR} -d ${SOLR_DATA_DIR} -p ${SOLR_PORT}

EXPOSE ${SOLR_PORT}

## 実行コマンド
ENTRYPOINT service solr start && tail -f /dev/null