SolrをソースからBuildする

SolrをソースからBuildする
==============================

+ Solr のSimilarity を自分勝手に変更したいと考えたのですが、schemaやsolrconfigでは限界がありました
+ なので、ソースからBuildをし、自分勝手なSimilarityを使いたいと思います
+ Similarityを変更することがメインですが、ソースからBuildするやり方を記載してありますのでご参考に

+ *執筆時点で、solr-4.5.1 が最新版なので、もしバージョンが異なれば適宜修正して読んで下さい*

### ソフトウェアのダウンロードとインストール

1 yum を用いたパッケージのインストール

```sh
$ sudo yum install -y java-1.7.0-openjdk-devel.x86_64
$ sudo yum install -y tomcat6-webapps tomcat6-admin-webapps
```

2 Solr等の置き場を /app とする

```sh
$ sudo mkdir /app
$ sudo chown vagrant:vagrant /app
$ cd /app
```

3 コンパイルに必要な物をダウンロード

```sh
$ wget http://mirrors.go-parts.com/apache/lucene/solr/4.5.1/solr-4.5.1-src.tgz
$ wget http://ftp.riken.jp/net/apache//ant/binaries/apache-ant-1.9.2-bin.tar.gz
```

4 ant のインストール

```sh
$ sudo ln -s /app/infrastructure/apache-ant-1.9.2 /usr/src/apache-ant-1.9.2
$ sudo ln -s /usr/src/apache-ant-1.9.2 /usr/local/ant
$ sudo vim /etc/profile
export ANT_HOME=/usr/local/ant
export PATH=$PATH:$ANT_HOME/bin
$ ant -version
Apache Ant(TM) version 1.9.2 compiled on July 8 2013
```

5 SolrのBuild

```sh
$ cd solr-4.5.1-src
$ ant ivy-bootstrap
$ ant compile
BUILD SUCCESSFUL
Total time: 4 minutes 26 seconds
$ sudo su - 
# cd /appp/solr-4.5.1-src/solr/
# ant example
```
6 SolrInit のインストール

```sh
$ git clone https://github.com/jbusby/solr-initd.git
$ cp solr.initd /etc/init.d/solr
$ chmod 755 /etc/init.d/solr
$ cp solr.start /app/solr-4.5.1-src/solr/example/solr.start
$ cp solr.conf /etc/solr.conf
# Edit solr.conf to suite your needs.
$ vim /etc/solr.conf
SOLR_HOME=/app/solr-4.5.1-src/solr/example
SOLR_START=/app/solr-4.5.1-src/solr/solr.star
LOG_FILE=/var/log/solr/solr.log
```

### Gessy0129Similarityの追加

1 lucene にロジック追加

+ lucene/core/src/java/org/apache/lucene/search/similarities/Gessy0129Similarity.java
  + 書き方はDefaultSimilarity.java 等を参照。コピってもいい
  
```diff
--- lucene/core/src/java/org/apache/lucene/search/similarities/Gessy0129Similarity.java	2014-01-07 08:44:01.913794926 +0000
+++ lucene/core/src/java/org/apache/lucene/search/similarities/DefaultSimilarity.java	2013-06-25 18:54:18.000000000 +0000
@@ -42,7 +42,7 @@
  * Last, note that search time is too late to modify this <i>norm</i> part of
  * scoring, e.g. by using a different {@link Similarity} for search.
  */
-public class Gessy0129Similarity extends TFIDFSimilarity {
+public class DefaultSimilarity extends TFIDFSimilarity {

   /** Cache of decoded bytes. */
   private static final float[] NORM_TABLE = new float[256];
@@ -54,7 +54,7 @@
   }

   /** Sole constructor: parameter-free */
-  public Gessy0129Similarity() {}
+  public DefaultSimilarity() {}

   /** Implemented as <code>overlap / maxOverlap</code>. */
   @Override
@@ -118,8 +118,7 @@
   /** Implemented as <code>sqrt(freq)</code>. */
   @Override
   public float tf(float freq) {
-    return 1;
-    //return (float)Math.sqrt(freq);
+    return (float)Math.sqrt(freq);
   }

   /** Implemented as <code>1 / (distance + 1)</code>. */
@@ -169,6 +168,6 @@

   @Override
   public String toString() {
-    return "Gessy0129Similarity";
+    return "DefaultSimilarity";
   }
 }
```

2 Solr にもロジック追加
+ solr/core/src/java/org/apache/solr/search/similarities/Gessy0129SimilarityFactory.java
  + DefaultSimilarityFactory.java からコピーし、名前を置換

3 Build

```sh
$ cd /app/solr-4.5.1-src
$ ant compile
$ cd solr
$ ant example
```

4 Schema.xml を修正

```
 <similarity class="solr.Gessy0129SimilarityFactory" />
```

5 Solrの再起動