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

編集ログイン 最終更新のRSS