SolrをソースからBuildする
- Solr のSimilarity を自分勝手に変更したいと考えたのですが、schemaやsolrconfigでは限界がありました
- なので、ソースからBuildをし、自分勝手なSimilarityを使いたいと思います
Similarityを変更することがメインですが、ソースからBuildするやり方を記載してありますのでご参考に
執筆時点で、solr-4.5.1 が最新版なので、もしバージョンが異なれば適宜修正して読んで下さい
ソフトウェアのダウンロードとインストール
1 yum を用いたパッケージのインストール
$ sudo yum install -y java-1.7.0-openjdk-devel.x86_64
$ sudo yum install -y tomcat6-webapps tomcat6-admin-webapps
2 Solr等の置き場を /app とする
$ sudo mkdir /app
$ sudo chown vagrant:vagrant /app
$ cd /app
3 コンパイルに必要な物をダウンロード
$ 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 のインストール
$ 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
$ 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 のインストール
$ 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 等を参照。コピってもいい
--- 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
$ cd /app/solr-4.5.1-src
$ ant compile
$ cd solr
$ ant example
4 Schema.xml を修正
<similarity class="solr.Gessy0129SimilarityFactory" />
5 Solrの再起動