sunspotのAPIレファレンスも参照してください。http://sunspot.github.com/sunspot/docs/
新しく項目を追加しましょう。
$ cd $ cd book $ rails g migration AddNumberOfPageToManifestation number_of_pages:integer $ rake db:migrate
以下のように設定されているとします。app/models/manifestation.rbを開きます。
# 末尾に ", :numnber_of_pages"を追加 attr_accessible :original_title, :note, :number_of_pages
searchable do text :original_title, :note string :original_title time :created_at integer :number_of_pages end
app/views/manifestations/_form.html.erb を開き、以下の行を追加します。
<%= f.label :number_of_pages %> <%= f.text_field :number_of_pages %>
- 全文検索
ここからはコンソールを起動して行います。
$ rails c
fulltext を使用します。text型が検索対象になります。以下の例では、original_titleとnoteフィールドを対象に、全文検索を行います。
Manifestation.search do fulltext '日本語' end
※なお、日本語が入力できない場合は、シェル上で以下のコマンドを打つ。
$ export LANG=ja_JP.UTF-8
※また、日本語が文字化けしている場合は、PuTTYの設定を変更する。
「設定の変更...」→「変換」→「文字コードの設定」を「UTF-8」にする。
- 並べ替え
order_by を使用します。text型以外のフィールドが並べ替えの対象になります。以下の例では、created_atフィールドを降順で、original_titleを昇順で並べ替えます。
Manifestation.search do order_by :created_at, :desc order_by :original_title, :asc end
original_title はtextとstringの両方で指定されていますが、stringを指定しないと並べ替えができないことに注意してください。
- 条件指定
with を使用します。以下の例では、number_of_pagesが100以上、created_atが2010年12月31日以前のものを検索します。
Manifestation.search do with(:number_of_pages).greater_than 100 with(:created_at).less_than Time.zone.parse('2012-07-14 07:30:00') end.results
「等しい」という条件を指定する場合は以下のようになります。
Manifestation.search do with(:number_of_pages).equal_to 50 end.results
- ページ送り
検索結果の件数が多い場合に、複数のページに分割します。paginate を使用します。以下の例では、1ページあたり20件、そのうちの5ページ目の検索結果を取得します。
Manifestation.search do with(:number_of_pages).greater_than 10 paginate :page => 5, :per_page => 20 end.results
- インデックスの設定
データベースに保存されているデータに少し修正を加えてインデックスを作成したい場合は、searchableブロックで指定します。以下の例では、original_title フィールドに保存されているデータを小文字に変換してインデックスに保存します。
searchable do string :original_title do original_title.downcase end end
- ファセット
textフィールド以外はファセット検索の対象にすることができます。以下の例では、number_of_pages フィールドを対象にしています。
searchable do fulltext "検索語" facet :number_of_pages end