Rails全文検索導入記(MySQL+Senna(Tritonn)+CentOS5):Rails編
本題のRailsへの適用方法へ。
構成
MVCはこんな構成で。
controller -user_controller.rb model -user.rb views -search.html.erb -index.html.erb
テーブルはこんな感じ
カラム名 | 説明 |
id | ID |
name | 名前 |
address | 住所 |
また、全文検索ではacts_as_tritonnを使用してみることにした。
適用手順
Usersテーブル & FULLTEXT INDEX生成
Migration作成。INDEXはMecabで。
#●create_users.rb class CreateUsers < ActiveRecord::Migration def self.up create_table "users", :force => true do |t| t.column :name, :string t.column :address, :string end add_index :users, [:name], :fulltext => "MECAB" add_index :users, [:address], :fulltext => "MECAB" end def self.down end end
Model
#●user.rb class User < ActiveRecord::Base acts_as_tritonn end
View
#●index.html.erb THE 全文検索 <% form_tag({:action => "search"}, {:method => "get"}) do %> <%= text_field_tag "q", @q, :class => "query" %> <%= submit_tag "検索" %> <% end %>
#●search.html.erb <% form_tag({:action => "search"}, {:method => "get"}) do %> <%= text_field_tag "q", @q, :class => "query" %> <%= submit_tag "検索" %> <% end %> <table border="1"> <tr> <th>id</th> <th>名前</th> <th>住所</th> </tr> <% @users.each{|m| %> <tr> <td><%= m.id %></td> <td><%= m.name %></td> <td><%= m.address %></td> </tr> <% } %> </table>
Controller
#●user_controller.rb class UserController < ApplicationController def index end def search @q = params[:q] # nameとaddress両方をor検索。(複数カラムを対象とする場合は:allオプションを有効にする。) query = {:name => @q, :address => @q} @users= User.find_fulltext(query, :all => true) end end
簡単簡単!