Solr8:Kuromoji+UniDicをビルドする
別記事でSolr9に対してUniDicを内蔵したKuromojiのビルド方法について記載しましたが、Solr8でもKuromoji+UniDicを使いたかったので、Solr8.11.2用のパッチを作成しました。
Solr8とSolr9はそれ以前のメジャーバージョンアップと比較しても大幅に変わっている印象を受けます
- Javaの要求環境がSolr8までは1.8以上であったのに対して、Solr9は11以上になっている
- Solr8まではSolrがLuceneを含むようにソースが構成されていたのに対して、Solr9からはソースが別れた。これによってSolr9からはKuromojiをビルドしたい場合はLuceneをビルドするだけでよくなった
- Solr8まではビルドツールがAntだったが、Solr9はGradleになった
- Solr9からベクトル検索ができるようになった。これにより深層学習の成果を検索に取り込めるようになった
LuceneがUniDicを扱えるようにする改造はjohtaniさんのプルリクがすでに存在するので、これをベースにして、用いる辞書をUniDicに決め打ちにしました。また、辞書ファイルの編集に対応するために、rebuild-dictターゲットを追加してあります。
ビルド手順
Solrのソースファイル取得
Solr8.11.2のソースを取得して解凍します
wget https://archive.apache.org/dist/lucene/solr/8.11.2/solr-8.11.2-src.tgz
tar xvf solr-8.11.2-src.tgz
cd solr-8.11.2
パッチの適用
パッチを取得して適用します
curl -O https://gist.github.com/KANATAKA/ad92778084685ca9b8cd670169a66ddc
patch -p1 < kuromoji_unidic_solr8112.patch
(オプション) パッケージ名の変更
この記事でビルドするKuromoji+UniDicを、デフォルトのKuromoji+IPAdicやKuromoji+NEologdなど、複数のKuromojiと共存させたい場合、パッケージ名を変更するスクリプトを使ってソースファイルのパッケージを変更します
wget https://gist.github.com/KANATAKA/c87d586c41487fa507a2d0e667074660
# mod_package.shを開いて、PACKAGE="com/example/unidic" で定義されているパッケージ名を好きなものに変更します。
./mod_package.sh
ビルド実行
辞書をビルドします
ant ivy-bootstrap
ant compile
cd lucene/analysis/kuromoji
ant build-dict
ant jar-core
cd -
Solrへの設置
ビルド成果物の、
lucene/build/analysis/kuromoji/lucene-analyzers-kuromoji-8.11.2-SNAPSHOT.jar
このファイルがKuromoji+UniDicなので、別途インストールしてあるSolrの server/solr-webapp/webapp/WEB-INF/lib に設置し、コアもしくはコレクションをリロードしてSolrに反映させます
(オプション)スキーマへの反映
パッケージ名を変更した場合、スキーマ定義において、JapaneseTokenizerFactory、JapaneseBaseFormFilterFactory、JapanesePartOfSpeechStopFilterFactoryの各クラスを変更したパッケージで記述します。
mod_package.shでパッケージをcom/example/unidic とした場合の各クラスのパッケージは以下のとおりです。
com.example.unidic.lucene.analysis.ja.JapaneseTokenizerFactory
com.example.unidic.lucene.analysis.ja.JapaneseBaseFormFilterFactory
com.example.unidic.lucene.analysis.ja.JapanesePartOfSpeechStopFilterFactory
辞書を編集して再ビルドする
UniDicの辞書を編集してトークナイズの挙動を変えたい場合、ビルドしてできた以下のファイルを編集します
lucene/build/analysis/kuromoji/unidic-mecab-2.1.2_src/lex.csv
編集が終わったらKuromoji+UniDicを再ビルドします
cd lucene/analysis/kuromoji
ant rebuild-dict
ant jar-core
更新されたlucene-analyzers-kuromoji-8.11.2-SNAPSHOT.jarをSolrへ設置して反映させます
Discussion