廃墟

本ブログは更新を終了しました。 技術的な記事のみ、有用性を鑑みて残しておきます。

Sunspot (RailsでSolrによる検索を動かすGem)をとりあえず日本語検索に対応する方法

日本語で割と最近っぽい情報が全然なかったので簡単にメモ。

Solr: 6.6.0 / 7.0.0

Sunspot: 2.2.7

<RAILS_APP>/solr/configsets/sunspot/conf/schema.xml の中で <fieldType name="text" から始まって </fieldType> で終わる部分を以下の内容に差し替える。

<fieldType name="text" class="solr.TextField" omitNorms="false" 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>

stopwords_ja.txt 及び stoptags_ja.txt は solrをapache.orgから solr-7.0.0-src.tgz みたいなファイルをダウンロードしてきて 、その中にある solr-7.0.0/solr/core/src/test-files/solr/configsets/_default/conf/lang のうち _ja.txt で終わるファイルを <RAILS_DIR>/configsets/sunspot/conf/lang の中に入れれば良いみたい。 面倒ならとりあえずそれが必要な行を削っても、それなりには動く。

これをベースにtokenizerにuserDictionaryとか入れればユーザ辞書を使った検索とかも出来るっぽい。

今あまり時間がなくて雑なメモになってますが、もしもう少し丁寧に知りたい人がいたらTwitterのメンションとか、ここへのコメントくれれば追記します。