Apache Solr 4.4 日本語用設定
Solr に Amazon商品データを登録して色々と試したのだけど、検索キーに対して結果が想定と微妙に異なることがあった。fieldType の設定はデフォルトのまま流用したのだけど、やはりちゃんと理解したうえで調整も必要なのだろう、ということで設定について調査している。(Web上には色々と情報も出ているがまとめとかないと、また後でやるときが面倒)徐々に書き足す予定。
※ 2013/09/04 共通設定を分離
共通設定
種別 | class | 説明 | オプション | 参考 |
---|---|---|---|---|
charFilter | solr.MappingCharFilterFactory | マッピングファイルに書かれたルールに従って文字を変換する。 | mapping=mapping-ja.txt | Mapping CharFilterFactoryの使い方 |
charFilter | solr.PatternReplaceCharFilterFactory | 正規表現で指定されたパターンに沿って文字を変換する。 | pattern="([^a-z])" replacement="" | Pattern ReplaceCharFilterFactoryの使い方 |
charFilter | solr.HTMLStripCharFilterFactory | テキストからHTMLタグを取り除く。 | ー | solr.HTMLStripCharFilterFactory |
filter | solr.LowerCaseFilterFactory | 英大文字を小文字に変換する。 | − | solr.LowerCaseFilterFactory |
filter | solr.CJKWidthFilterFactory | 全角ASCII文字を半角に、半角カタカナを全角に変換する。solr.MappingCharFilterFactoryでこの手の変換を記述する必要は無いと言うことになる。 | − | CJKWidthFilterFactory |
filter | solr.SynonymFilterFactory | 類義語の展開と設定をおこなう。類義語定義の書式は参考のページに詳細が記述してある。 | synonyms="syn.txt" ignoreCase="true" expand="false" | solr.SynonymFilterFactory, solrの同義語の設定, kuromojiの辞書のメンテナンス |
N-GRAM
N-GRAMを使用する場合は、以下の設定の組み合わせに共通設定を組み合わせてトライすれば良い。
種別 | class | 説明 | オプション | 参考 |
---|---|---|---|---|
tokenizer | solr.StandardTokenizerFactory | 標準的なTokenizerで、Unicode standard annex UAX#29に従ってトークン分割する。これ自体はN-GRAMとは関係なく、solr.CJKBigramFilterFactoryの方がN-GRAM生成の本体。 | maxTokenLength=255 | solr.StandardTokenizerFactory |
tokenizer | solr.ICUTokenizerFactory | solr.CJKBigramFilterFactoryへトークンを渡す際に挙げられていたtokenizerの一つ。ちゃんと見てないが、StandardTokenizerFactory で良いだろう。 | − | solr.ICUTokenizerFactory |
filter | solr.WordDelimiterFilterFactory | 英数字やデリミタ(ハイフン等)で構成される文字の表記揺れを吸収する。 | 参考ページ参照 | solr.WordDelimiterFilterFactory |
filter | solr.CJKBigramFilterFactory | bigramへの分割を行う。StandardTokenizer または ICUTokenizer と組み合わせる。文字種(ひらがな、カタカナ)毎に分割をおこなうかどうか、unigramの出力をおこなうかどうか、を属性で指定できる。 | han="true" hiragana="true" katakana="true" hangul="true" outputUnigrams="false" | CJKBigramFilterFactory |
実際の設定では、以下の組み合わせをベースに変更していく。(2013-08-27現在、defaultのまま)
<fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.CJKWidthFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.CJKBigramFilterFactory"/> </analyzer> </fieldType>
形態素解析
形態素解析を使用する場合は、以下の設定の組み合わせに共通設定を組み合わせてトライすれば良い。
種別 | class | 説明 | オプション | 参考 |
---|---|---|---|---|
tokenizer | solr.JapaneseTokenizerFactory | 形態素解析器、KuromojiをSolrから使えるようにしたもの。これが基本。 | mode="search" userDictionary="lang/userdict_ja.txt" | Java製形態素解析器「Kuromoji」を試してみる, solrの日本語形態素解析の設定, kuromojiの辞書のメンテナンス |
filter | solr.JapaneseBaseFormFilterFactory | 動詞の活用形等を基本形に変換する(正規化) | − | Class JapaneseBaseFormFilterFactory |
filter | solr.JapanesePartOfSpeechStopFilterFactory | tagsで指定されたファイルに記述された品詞を除外する | tags="lang/stoptags_ja.txt" | Class JapanesePartOfSpeechStopFilterFactory |
filter | solr.StopFilterFactory | wordsで指定されたファイルに記述された単語を除外する | ignoreCase="true" words="lang/stopwords_ja.txt" | solr.StopFilterFactory |
filter | solr.JapaneseKatakanaStemFilterFactory | カタカナ文字列最後の長音(ー)を除去する。minimumLengthで指定した文字数以上のカタカナのみが対象。 | minimumLength="4" | Class JapaneseKatakanaStemFilterFactory |
実際の設定では、以下の組み合わせをベースに変更していく。(2013-08-27現在、defaultのまま)
<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false"> <analyzer> <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/> <filter class="solr.JapaneseBaseFormFilterFactory"/> <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" /> <filter class="solr.CJKWidthFilterFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" /> <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>