Rails
solr

Railsのsunspotで日本語関連設定いろいろ

More than 5 years have passed since last update.

環境

  • solr v4.2.0
  • sunspot 2.1.0
  • sunspot_rails 2.1.0
  • sunspot_solr 2.1.0

設定

solr/conf/schema.xml
    <fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer type="query">
        <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>
        <filter class="solr.JapaneseBaseFormFilterFactory"/>
        <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" enablePositionIncrements="true" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" enablePositionIncrements="true" />
        <filter class="solr.CJKWidthFilterFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms_q.txt" ignoreCase="true" expand="true" />
        <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="index">
        <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>
        <filter class="solr.JapaneseBaseFormFilterFactory"/>
        <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" enablePositionIncrements="true" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" enablePositionIncrements="true" />
        <filter class="solr.CJKWidthFilterFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
        <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

queryとindex

検索時とインデックス作成時で設定を分ける

<analyzer type="query">
</analyzer>
<analyzer type="index">
</analyzer>

solr.JapaneseTokenizerFactory

  • Kuromojiを使った形態素解析
  • userDictionaryはユーザー辞書を使いたい場合に設定

solr.JapaneseBaseFormFilterFactory

  • 動詞などを基本形に変換する

solr.JapanesePartOfSpeechStopFilterFactory

  • 接続詞とか副詞とか必要なさそうなのを除外
  • 除外する内容はtagsで指定したtxtファイルに

solr.StopFilterFactory

  • 「する」「から」「なら」「のみ」とか必要ないものインデックスから除外
  • 除外する内容はtagsで指定したtxtファイルに

solr.CJKWidthFilterFactory

  • 全角のローマ字を半角にしたり半角カナを全角にしたり

solr.SynonymFilterFactory

  • 同義語の設定。タマゴと検索したら卵もたまごもタマゴも玉子も検索できるように
  • 内容はsynonymsで指定したtxtファイルに

solr.JapaneseKatakanaStemFilterFactory

  • カタカナのみの文字列の最後の長音(ー)を除去
  • minimumLengthは文字数。4なら4文字以上のカタカナ

solr.LowerCaseFilterFactory

-アルファベットを小文字