Ruby on Railsで部分一致検索
Ruby on Railsで部分一致検索やってみました。
( DB => Mysql )
params[:content] = "hoge" @count = Item.count(:conditions => ["test_c like ?", "%"+params[:content]+"%"]) @pages, @items= paginate(:item, :per_page => 20, :conditions => ["test_c like ?", "%"+params[:content]+"%"] )
もちろんfindでも同じです。
Item.find(:all, :conditions => ["test_c like ?", "%"+params[:content]+"%"])
ポイントは、:conditionsの書き方ですね。
SQL文は、
select * from item where test_c like '%hoge%'
こんな感じですね。
これで、hogeはもちろんaahogeaaやabahoge、hogeaaも検索できるようになりました。
○試した環境
Ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
Rails 1.2.3
Mysql server version: 4.1.22-community-nt
※ちょっと小話
部分一致検索と、全文検索機能と部分一致は違うのですね・・・。
今回、Rails(DB=>Mysql)で部分一致検索しようとして、「FULLTEXTインデックス」を利用しようと思ってしまいました・・・。
だって、「mysql 部分一致」の検索でFULLTEXTの文字がたくさんヒットするから・・・。
「FULLTEXTインデックス」を利用しようとして2時間ほど調べまくりました・・・(--;
MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.9 全文検索関数
MySQLで全文検索 - FULLTEXTインデックスの基礎知識|blog|たたみラボ
FULLINDEXって制約多いよね・・・。
まぁ、FULLINDEXはじめてやってみたし、なかなか良い経験だったかな。今回使わないけど。