Apache Solr（JDK7, Solr 4.9.1, jetty 9）をインストールしてみたその１

# Apache Solr
全文検索エンジンと言えば旬の「Elasticsearch」ですが、たまたま Apache Solr を調査する機会があったのでそのメモです。しかし枯れた感じがする Solr だけど意外とインストールに手間取った。

> [検索エンジンの常識をApache Solrで身につける](http://www.atmarkit.co.jp/ait/articles/1111/18/news148.html)

| ソフトウェア | バージョン |
|:-----------|:----------|
|Java    |1.7.0      | 
|Apache Solr         |4.9.1    |
|Jetty        |9.2.10     | 

# Vagrant 
いつもの定義だってばさｗ

```
config.vm.define :solr do |node|
  node.vm.network :private_network, ip: "192.168.11.210"
  node.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--memory", 512]
  end
end
```

# Java のインストール
Solr 4.9系は、JDK 7以上じゃないと動かないよ、ってどこかで見たような気がするので、JDK 7 ランタイム,開発環境, ant と wget をインストールします。まあランタイムだけでもいいっちゃいいと思うけどねｗ

```
# yum install java-1.7.0-openjdk.x86_64 java-1.7.0-openjdk-devel.x86_64 ant.x86_64 wget
```
# Apache Solr のインストールと起動確認
インストール先は、どこでもいいのですが特にこだわりないので、/var/local にインストールしました（ちゃんと考えると /opt がいいかもねｗ）。

```
$ wget http://ftp.riken.jp/net/apache/lucene/solr/4.9.1/solr-4.9.1.tgz
$ tar xvfz solr-4.9.1.tgz
$ sudo cp -rp solr-4.9.1 /var/local/solr/
$ cd /var/local/solr/example
$ sudo java -jar start.jar
```

ずらずらずらーってなんだか滝のように表示されるけどエラーらしき表示がされていなければ、Solr が起動してますので。管理画面が表示されるるかブラウザで確認してます。

管理画面　：　http://192.168.11.210:8983/solr
検索画面　：　http://192.168.11.210:8983/solr/collection1/browse

![solr-1.png](https://qiita-image-store.s3.amazonaws.com/0/44540/edc30ff2-c474-4d4b-1bcc-2b64da11f62b.png)

## データを登録、検索してみる
適当なとこに下記のファイルを作成します。

```xml:solrtest.xml
<add>
    <doc>
        <field name="id">1</field>
        <field name="name">hoge hoge</field>
    </doc>
    <doc>
        <field name="id">2</field>
        <field name="name">アパッチ</field>
    </doc>
    <doc>
        <field name="id">3</field>
        <field name="name">東京特許許可局</field>
    </doc>
</add>
```

curl を使って登録してみます。

```
$ curl 'http://localhost:8983/solr/collection1/update?commit=true&indent=true' --data-binary @solrtest.xml -H 'Content-Type: text/xml'
<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">155</int>
</lst>
</response>
```

curl を使って検索してみます。

```
# curl "http://localhost:8983/solr/collection1/select?q=hoge&wt=json&indent=true"
{
  "responseHeader":{
    "status":0,
    "QTime":10,
    "params":{
      "indent":"true",
      "q":"hoge",
      "wt":"json"}},
  "response":{"numFound":1,"start":0,"docs":[
      {
        "id":"1",
        "name":"hoge hoge",
        "_version_":1498497071919923200}]
  }}
```

# Jetty 9 をインストールし Solr を起動
ここまで順調ですが、こっからが多少はまりました。

## 起動に失敗するｗ
折角なので Jetty 9 を使って　Solr を起動してみます。そして起動しないってオチを再現します。

```
$ wget http://download.eclipse.org/jetty/stable-9/dist/jetty-distribution-9.2.10.v20150310.tar.gz
$ tar zxvf jetty-distribution-9.2.10.v20150310.tar.gz
$ sudo cp -rp jetty-distribution-9.2.10.v20150310 /var/local/jetty/
$ sudo cp /var/local/jetty/bin/jetty.sh /etc/init.d/jetty
```

jetty の起動パラメータを /etc/default/jetty に設定します。

```text:/etc/default/jetty
JAVA_HOME=/etc/alternatives/java_sdk
JAVA_OPTIONS="-Djava.awt.headless=true -server -XX:+UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+UseTLAB -XX:MaxPermSize=128m -Xms512M -Xmx1024M $JAVA_OPTIONS -Dsolr.solr.home=/var/local/solr/example/solr"
NO_START=0
JETTY_ARGS=jetty.port=8983
JETTY_USER=root
JETTY_HOME=/var/local/jetty
JETTY_LOGS=/var/local/solr/example/logs
```

で、サービスを起動してみます。エラーが発生しとるｗ

```
# service jetty start
```

## 動かない理由がわかった
jettyで動かすための環境が整備されていないというオチでした。なので設定ファイルもコピーしたりして再挑戦します。

```
$ sudo cp -a /var/local/solr/example/webapps/solr.war /var/local/jetty/webapps/solr.war
$ sudo cp -a /var/local/solr/example/contexts/solr-jetty-context.xml /var/local/jetty/webapps/solr.xml
$ sudo cp -a /var/local/solr/example/lib/ext/* /var/local/jetty/lib/ext/
$ sudo service jetty start
```

管理画面が表示されたー (^^

## INFO をファイルに保存
INFO が画面に表示されウザイと思ったら log4j の設定がされていなかった。ので、ファイルに保存するよう適当に編集します。ここらへんは、後々に響くのでちゃんと設定しといた方が良いです。

```text:/var/local/jetty/resources/log4j.properties
# This is not needed by Jetty - but it helps with many web apps.

log4j.rootLogger=INFO, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
solr.log=/var/local/solr/example/logs
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
```

よっしゃ。

# 参考にさせて頂いたサイトさま

> [Ubuntu12.04にJetty9とsolr4.5.1をインストールしてみる](http://ma2kubo.hateblo.jp/entry/2013/11/15/054153)
> [Apache Solrのインストール](http://kazuhei.hatenablog.com/entry/2014/07/13/010109)
> [apache solr インストール](http://qiita.com/inouet/items/fe1e4a1d506a8dc01b27)