準備
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 にチェックが付いているのは、あとあといじりたいためで、普通に検索するだけだったら必要ない。
同様に、title, revision, user, userId, timestamp のうち必要なものを登録する。
Solr を再起動
bin/solr restart
インポートの実行
コンソール
http://localhost:8983/solr/
から、wikipedia コアを選んで、DataImport タブから Execute ボタンを押す。
インポートが始る・・・と思ったら、ヒープが小さすぎて途中で落ちる。ー>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
など