Solr CJKAnalyzerで日本語文章の検索をする その2 CJKAnalyzerのバグを修正する

SolrのCJKAnalyzerは内部でLuceneのCJKAnalyzerを利用しているのですが
実はこまったことにこのLuceneのCJKAnalyzerには重大なバグがあります。
まともに検索できません...


http://issues.apache.org/jira/browse/LUCENE-973
ここに日本人のToru Matsuzawaさんがパッチを上げてくれているのでそれを適用します。
MatsuzawaさんGJ!


バグの指摘は1年以上前にされたままずーっと放置されていたのですが
Solrのコミッターで「Apache Lucene入門」著者でもある
関口さんのフォローもあって
最近、対応される方向に進んでるみたいです。よかったですね。

作業手順

ざっくりとした作業手順です。

  1. Luceneのソースをダウンロードする
  2. パッチを入手して当てる
  3. ビルドする
  4. jarを入れ替える

Luceneのソースをダウンロードする

本来ならsvnから最新のソースを持ってきたいところなのですが
Solrの開発はLucene2.3.2で行われている一方
Luceneの方は既に2.4になっているので
最新のソースだとうまく動かない可能性があります。
このため2.3.2のコードを入手します。

% wget http://ftp.riken.jp/net/apache/lucene/java/lucene-2.3.2-src.tar.gz
% tar xvfz lucene-2.3.2-src.tar.gz

パッチを入手して当てる

Matsuzawaさんのパッチを入手して当てます。

% cd lucene-2.3.2
% wget http://issues.apache.org/jira/secure/attachment/12363325/CJKTokenizer20070807.patch
% patch -p0 < CJKTokenizer20070807.patch

ビルドする

先にLucene本体をビルドしてからcontribのAnalyzerをビルドします。

% ant
% cd contrib/analyzers
% ant

jarを入れ替える

ビルドしたjarはlucene-2.3.2/build/contrib/analyzers/lucene-analyzers-2.3.jarにできます。
これをSolrに付属しているlucene-analyzers-2.3.2.jarと入れ替えます。

% cd ../../build/contrib/analyzers/
% cp lucene-analyzers-2.3.jar $TOMCAT_HOME/webapps/solr/WEB-INF/lib
% rm $TOMCAT_HOME/webapps/solr/WEB-INF/lucene-analyzers-2.3.2.jar

後はtomcatを再起動すればOKです。

長くなったのでCJKAnalyzerを使ったインデキシングと検索はまた次回に。


ではでは。