LoginSignup
6
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-05-17

準備

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

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

Solr を再起動

bin/solr restart

インポートの実行

コンソール

http://localhost:8983/solr/

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

SS.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
など
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5