2015年12月13日日曜日

solrに1-gram

N-gramというものは、文字列をN文字ごとに分解して、あってるかなーどうかなーって検索するもの。
2-gramなら「とうきょう」なら「とう」「うき」「きょ」・・のように。
ちゃんと単語の意味を辞書で調べて検索する形態素解析とは別物です。
これが1文字なら1-gram。ユニグラムともいうらしい。

2-gramならデフォルトのサンプルのSolr上に書かれている。
ただ、2-gramなら、例えば商品名や会社名といった、辞書にないものを検索するときに2文字以上だと正しい動作をしない。
そういうわけで1-gramが必要となったので、つくりました。
<fieldtype name="1-gram" class="solr.TextField" omitNorms="false" autoGeneratePhraseQueries="true">
<analyzer>
<tokenizer class="solr.NGramTokenizerFactory" maxGramSize="1" minGramSize="1" />
<!-- normalize width before bigram, as e.g. half-width dakuten combine -->
<filter class="solr.CJKWidthFilterFactory"/>
<filter class="solr.JapaneseReadingFormFilterFactory" useRomaji="false"/>
<!-- for any non-CJK -->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldtype>