LoginSignup
5
6

More than 5 years have passed since last update.

sunspot+RailsでSolr5.4を使う

Posted at

Railsの検索機能を早くするのにSolrを組み合わせるケースが多いようで、その際はsunspotでRailsとSolrをつなぐと思います。そのときのやり方

schema.xmlとsolrconfig.xmlの生成

インデックスの生成方法などを決めるschema.xmlとsolrconfig.xmlが鍵となります。
下記のissueにあるように、sunspot_solrでsolr 5.x系に対応するものを生成させます。

gem install sunspot_solr
bundle exec rake sunspot:solr:run

これで、gemのインストール先のsunspot_solrのディレクトリの下に、sunspotに対応したschema.xmlとsolrconfig.xmlなどのconfigのディレクトリができます。これをもとにします。

solrのコア作成

${SOLR_HOME}/bin/solrでコアを作成します。オプションで設定ファイルのディレクトリを指定できるので、前述で作ったものを使います。

${SOLR_HOME}/bin/solr create -c core -d configsets

インデックスの作成

どういう検索するかによって、インデックスの作り方を決めます。
sunspot_solrでつくったものは、StandardTokenizerというもので、スペースや改行など、一般的に単語の区切りとされるもので、トークンをつくっていくものです。特に拘りがなければこれからはじめるのがよいでしょう。

区切りのルールの詳細は下記を。
http://unicode.org/reports/tr29/#Word_Boundaries

とにかく部分一致

いわゆるbigramの設定をすると、手っ取り早く部分一致が実現できます。そのかわり検索ノイズもでます。問答無用で2文字区切りでトークンをつくるので、wildcardをつかったクエリがあまり意味がなくなってしまいます。

前方一致と後方一致

NGramを前方・後方からやるEdge NGramを使います。

形態素解析

日本語の標準のも用意されているようです。
https://cwiki.apache.org/confluence/display/solr/Language+Analysis#LanguageAnalysis-Japanese

インデックスとクエリ

インデックスのときに、どう分割するかを決めるように、入力された検索語の分割の仕方も指定できます。インデックスとクエリを同じルールにも、違うようにも設定できます。さらに、フィールドごとにも設定できるようです。

まとめ

SQLでできるレベルの検索しかしないなら、solrにあまり踏み込まなくもよさそうですが、それなりの検索をしようと思ったら、ちゃんとインデックスの仕組みをおさえる必要があるようです。

参考サイト

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6