新しい勤務先で早速Solr 1.4系→4.x系の移行を担当することになり、既存環境でSolrのTokenizer・CharFilterなどを独自開発している部分があるのを移行作業中。そこでちょっとハマった部分があるのでメモ。
Solr 4.0以降ではTokenizerFactory・CharFilterFactoryあたりのクラスがSolr側からLucene側に移っていて、import元をorg.apache.solr.analysis.*からorg.apache.lucene.analysis.util.*に変更しないといけない(詳しくは
こことか
こことかに解説あり)。
ただ実際のところ、それだけでは話が済まないわけで、今回はとりあえず以下の様な修正が必要だった。
◯CharFilter関係
・BaseCharFilterの継承元がorg.apache.lucene.analysis.charfilter.BaseCharFilterに変更
・Factoryクラスのcreate()に渡される引数がCharStreamクラスではなくReaderクラスに変更
◯Tokenizer関係
・super.reset() が引数を取らないもののみになった
既存コードでReaderクラスを引数で渡していたのを削除
◯Similarity関係
・org.apache.lucene.search.Similarity がなくなって org.apache.lucene.search.similarities.* に移行
既存のSimilarityクラスを継承しているコードについては、TFIDFSimilarityクラスを継承する形に変更するのが良さげ
その場合でもLengthNorm()の引数変更、scorePayload()の追加などの対応が必要
◯その他
・TermAttributeがなくなってCharTermAttributeに移行
その関係でmethodの修正が必要(setTermBuffer() → append()、termBuffer() → buffer() など)
これでとりあえずコンパイルは通ってSolrも起動するようにはなったが、Solrの管理画面からAnalyzeを試すと意図した結果が返ってこないので、これから調整。