maeshimaの日記

メモ書きです

sunspotのチュートリアル意訳

インストール

solrのインストールはmacなら

brew install solr

でOK。Rails側はまずGemfileに

gem 'sunspot_rails'

を書いて bundle install。それから

rails g sunspot_rails:install

で config/sunspot.yml を作成。

solr のインスタンスを起動

下記の rake タスクで起動できる

rake sunspot:solr:start

初回実行時に Rails.root/solr ディレクトリが作成される。ここには Solr の設定とインデックスのデータファイルが置かれる。solr/data は.gitignoreに追加しておいた方がいいかも。Solr の設定いじりたい場合は solr/conf 配下のファイルをほげる。

モデルの設定

下記みたいに searchable メソッドで設定する。

class Post < ActiveRecord::Base
  searchable do
    text :title, :default_boost => 2
    text :body
  end
end

Postが作られたり更新されたりしたときに自動でインデックスを更新してくれるみたい。searchable の中身を変更したときなどは、手動でインデックスの更新が必要

rake sunspot:reindex

検索

こんな感じで検索すると

class PostsController < ApplicationController
  def search
    @search = Post.search(:include => [:comments]) do
      keywords(params[:q])
    end
  end
end

Sunspot::Search オブジェクトが @search に入る。view は下記のように書く。

.results
  - @search.each_hit_with_result do |hit, post|
    .result
      %h2= h post.title
      %h6== (#{h hit.score})
      %p= h truncate(post.body, :length => 100)
.pagination
  = will_paginate(@search.results)

これだと検索したときと検索してないときの処理を分けなきゃいけなくて面倒くさい気がする。