コードジガー

色々と書くと思います

Solr4.0のJapaneseTokenizerFactory ( kuromoji ) で記号や特殊文字が捨てられないようにする方法

Solr4.0 の schema.xml(sample) では 以下のようになっていて、このまま text_jaを使っても記号特殊記号をインデックス化してくれない
このまま使うと記号や特殊記号が消えてしまう
lucene-gosenはdefaultで記号を拾います

schema.xml

<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
  </analyzer>
</fieldType>

f:id:takaya1219:20121121151301p:plain

しかし、kuromojiのサイトではキチンと解析できていることがわかる
つまり、できるはず
f:id:takaya1219:20121121145658p:plain
ということでソース追ってみたら discardPunctuationという設定があった!

JapaneseTokenizerFactory に対して discardPunctuation="false"を与えると記号や特殊記号を拾ってくれるようになる
※ default true
ただし、Solr3.6系ではソースコード上では実装されているが schema.xmlから設定することができない
もし、やるならソースコードを書き換える必要がある

schema.xml

<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" 
      discardPunctuation="false" />
  </analyzer>
</fieldType>

f:id:takaya1219:20121121151315p:plain

"★","♂","☆" 等の記号が拾われていることがわかる!