LIKE句(演算子)を使用したあいまい検索について、完全に忘れていたため、備忘録もかねて以下にまとめます。
LIKE句(演算子)とは
SQLの検索条件に指定される文字列比較演算子である。
ちょっと難しいですが、SQLに対して、LIKE句を使用するとあいまい検索ができるようになるということです。
LIKE句(演算子)の使い方
Railsでは基本的にWhereと一緒に使用し、以下のように使います。
model名.where('検索するカラム名 LIKE(?)', "検索ワード")
検索の取得件数の指定方法
.limited(数)と記載しましょう
>>先ほどのコードと組み合わせると以下のようになります。
model名.where('検索するカラム名 LIKE(?)', '検索ワード').limited(数)
不要な情報を除外する時
.where.not(不要な情報)
>>先ほどのコードと組み合わせると以下のようになります。
model名.where('検索するカラム名 LIKE(?)', '検索ワード').where.not(不要な情報)
ワイルドカードについて
一部を一致させて検索したい時、以下のワイルドカードが使用できます。
ワイルドカード | 意味 |
---|---|
% | 任意の0文字以上の文字列 |
_ | 任意の1文字 |
>>前に1文字だけ記載あり+後方に0文字以上の記載あり
model名.where('検索するカラム名 LIKE(?)', '_検索ワード%').limited(数)
>>前後ともに0文字以上の記載あり
model名.where('検索するカラム名 LIKE(?)', '%検索ワード%').limited(数)
>>前後ともに1文字の記載あり
model名.where('検索するカラム名 LIKE(?)', '_検索ワード_').limited(数)
具体例
上記を活用して、user名をキーワード入力された際に、検索できるようにします。
[条件]
モデル名:User
あいまい検索機能:キーワードを含んでいればOK
検索取得件数:10件
不要な情報:current_user.id=>ログイン中のユーザーIDを除外します。
上記条件を全てコードに入れると以下のようになります。
User.where(['name LIKE ?', "%#{params[:keyword]}%"]).where.not(id: current_user.id).limit(10)
以上となります。
最後まで閲覧いただき、ありがとうございました。
何か修正の必要な点などございましたら、コメントもしくは編集リクエストいただけますと幸いです。
参照
【Rails入門】where likeであいまい検索!複数条件やOR条件も解説
https://www.sejuku.net/blog/71189