🐜

Solr8:Kuromoji+UniDicをビルドする

2023/08/29に公開

別記事で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