祝 Lucene2.9.0 リリース!!
2009/9/25 に Lucene2.9 がようやく正式リリースされました。
便乗して久しぶりの Solr ネタです。
この記事は Lucene2.9.0 がバンドルされている 2009/09/28版の Solr をもとに書いています。
http://people.apache.org/builds/lucene/solr/nightly/solr-2009-09-28.tgz
日本語の文章をインデキシングするときによく使われるトークナイザとして CJKTokenizerFactory があります。
CJKTokenizerFactory は 基本的には 2-gram (別名 bi-gram, bigram ) なので
NGramTokenizerFactory で maxGramSize="2"としたときと
基本的には同じように動作するのですが、いくつか違うところがあります。
- CJKTokenizerFactory は連続する英数文字は何文字であっても分解せずに1語とします。
- CJKTokenizerFactory はアルファベットの大文字を小文字に自動で変換(ノーマライズ)してくれます。
- 両者ともアルファベットの全角を半角に自動で変換してくれます。
以下の例文をトークナイズして見た例です。
僕はBMW318tiが好きだ
BMWは半角大文字、318は半角数字、tiは全角小文字です。
- CJKTokenizerFactory の場合
- 2-gram の場合 ( NGramTokenizerFactory で maxGramSize="2" minGramSize="2" にした場合 )
このテストに使ったフィールドタイプの定義例です。
1-gram ( 別名 uni-gram, unigram ) 代わりによく使われる StandardTokenizerFactory も CJKTokenizerFactory と同じようにに連続する英数文字は1語としてトークナイズします。
状況に応じて使い分けると便利ですね。
ではでは