Solr 6.0 をインストール/Wikipedia のインポート

#準備

Java 1.8 をインストールしてJAVA_HOMEを設定しておく。

Solr 6.0 を以下からダウンロード。

	http://www.apache.org/dyn/closer.lua/lucene/solr/6.0.0
	（http://lucene.apache.org/solr/ から Download ボタン）

サジェストされたミラーにいくと3つファイルが。

	solr-6.0.0-src.tgz               2016-04-02 05:42   37M  
	solr-6.0.0.tgz                   2016-04-02 05:42  131M  
	solr-6.0.0.zip                   2016-04-02 05:42  140M  

下の2つのどちらでも大丈夫。
解凍されたディレクトリ

	・・・/solr-6.0.0

を $SOLR_ROOT と呼ぶ。以後

	cd $SOLR_ROOT

されているものとする。


#起動と終了
###起動してみる

	bin/solr start 

###確認
ブラウザで以下のアドレスが見れれば OK 

	http://localhost:8983/solr/

###終了する

	bin/solr stop

#サンプル

4つあるサンプルのうちの schemaless を動かしてみる。

	bin/solr -e schemaless

このサンプルにテストデータをロードする

	bin/post -c gettingstarted docs/

'english' という文字列を検索してみる。

	curl 'http://localhost:8983/solr/gettingstarted/select?q=english'

結果のデフォルトは XML、JSON でインデントするには

	curl 'http://localhost:8983/solr/gettingstarted/select?q=english&wt=json&indent=true'


#例によって Wikipedia をインポートしてみる。（DataImportHandlerを使う）

###データはここから

	https://dumps.wikimedia.org/jawiki/

###Solr を起動

	bin/solr start

###Core を wikipedia という名前で作成

	bin/solr create -c wikipedia

Core のフォルダ $SOLR_ROOT/server/solr/wikipedia が作成される。このディレクトリを SOLR_CORE_ROOT と呼ぶ。

###$SOLR_CORE_ROOT/conf/solrconfig.xml を編集する。

 	vi server/solr/wikipedia/conf/solrconfig.xml #お好きなエディタで

wikipedia-data-config.xml という名前のコンフィギュレーションファイルで DataImportHandler を使うことを指示するために、以下の内容を付け加える。

```
	<lib dir="../../../dist" regex="solr-dataimporthandler-.*\.jar" />
	<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
		<lst name="defaults">
			<str name="config">wikipedia-data-config.xml</str>
		</lst>
	</requestHandler>
```

lib dir には SOLR_CORE_ROOT から SOLR_ROOT/dist への相対パスを記述してある。（SOLR_ROOT/distへの絶対パスでも大丈夫）

###上で指定した $SOLR_CORE_ROOT/conf/wikipedia-data-config.xml を作成する。

 	vi server/solr/wikipedia/conf/wikipedia-data-config.xml #お好きなエディタで

内容は以下のとおり。
dataConfig/document/entity:url にダウンロードした Wikipedia のデータを指定する。
```
	<dataConfig>
		<dataSource type="FileDataSource" encoding="UTF-8" />
		<document>
			<entity name="page"
				processor="XPathEntityProcessor"
				stream="true"
				forEach="/mediawiki/page/"
				url="・・・・・/jawiki-20160501-pages-articles.xml"
				transformer="RegexTransformer,DateFormatTransformer"
			>
				<field column="id"        xpath="/mediawiki/page/id" />
				<field column="title"     xpath="/mediawiki/page/title" />
				<field column="revision"  xpath="/mediawiki/page/revision/id" />
				<field column="user"      xpath="/mediawiki/page/revision/contributor/username" />
				<field column="userId"    xpath="/mediawiki/page/revision/contributor/id" />
				<field column="text"      xpath="/mediawiki/page/revision/text" />
				<field column="timestamp" xpath="/mediawiki/page/revision/timestamp" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss'Z'" />
				<field column="$skipDoc"  regex="^#REDIRECT .*" replaceWith="true" sourceColName="text"/>
			</entity>
		</document>
	</dataConfig>
```

###スキーマの登録
text という名前のフィールドが日本語だよ、と指示するためにスキーマにあらかじめ 'text' フィールドを'Add Field' しておく。コンソール

	http://localhost:8983/solr/

から、wikipedia コアを選んで、Schema タブから Add Field ボタンを押す。term vector にチェックが付いているのは、あとあといじりたいためで、普通に検索するだけだったら必要ない。


![SS.tiff](https://qiita-image-store.s3.amazonaws.com/0/73493/91c72f19-f838-d33f-ec01-454760296282.tiff)

同様に、title, revision, user, userId, timestamp のうち必要なものを登録する。

###Solr を再起動

	bin/solr restart

###インポートの実行

コンソール

	http://localhost:8983/solr/

から、wikipedia コアを選んで、DataImport タブから Execute ボタンを押す。

![SS.tiff](https://qiita-image-store.s3.amazonaws.com/0/73493/85cec81e-7092-0335-54fe-6cff73cdf189.tiff)

インポートが始る・・・と思ったら、ヒープが小さすぎて途中で落ちる。ー＞JVM のメモリを増やす。

	bin/solr start -m 4g

で4Gになる。

text + title を登録で、MacPro で 1時間弱

	Indexing completed. Added/Updated: 1772362 documents. Deleted 0 documents. (Duration: 55m 40s)
	Requests: 0 , Fetched: 2,053,141 615/s, Skipped: 280,779 , Processed: 1,772,362 531/s

#おまけ

##ソースからコンパイル

	tar xf solr-6.0.0-src.tar
	cd solr-6.0.0
	ant compile
	cd solr
	ant server
	chmod +x bin/solr bin/post

solr ディレクトリに行って、再度 ant server を実行するのが肝。




##Similarity のデフォルト

Solr 6.0 からデフォルトの Similarity が BM25Similarity になっている。
以前と同じ Similarity にしたい場合は以下の2つの作業。

solrconfig.xml で luceneMatchVersion を6未満にする。

	<luceneMatchVersion>5.5.1</luceneMatchVersion>

schema.xml に以下の内容を追加

	<similarity class="org.apache.lucene.search.similarities.ClassicSimilarity"/>

schema.xml がない場合は、managed-schema をコピーすれば大丈夫。
またデフォルトが BM25Similarity になったおかげで、いくつかの FunctionQuery が使えなくなっている。
とりあえず確認したのは、tf, idf

##自前のクラスでオーバーライドしたい時の build.gradle

	apply plugin: 'java'

	repositories {
	    mavenCentral()
	    jcenter()
	}
	
	dependencies {
	    compile 'org.apache.lucene:lucene-core:6.0.0'
	    compile 'org.apache.solr:solr-core:6.0.0'
	    compile 'org.apache.solr:solr-solrj:6.0.0'
	    compile 'org.restlet.jee:org.restlet:2.3.6'
	}


##jar の位置

jar の位置をマニュアルでセットしなくちゃいけない場合。

### Solr の jar は $SOLR_ROOT/dist にある

	solr-core-6.0.0.jar
	solr-solrj-6.0.0.jar
	など

### Lucene の jar は $SOLR_ROOT/server/solr-webapp/webapp/WEB-INF/lib にあるのを使うか、https://lucene.apache.org からダウンロードする。

	lucene-core-6.0.0.jar
	lucene-queries-6.0.0.jar
	など