我的LIKE查询有点问题。
我在这里有这个查询
gmiurldb = Gmi.where('product_name ILIKE ? AND delivery_time = ? AND valid_from = ?', "%#{tmname}%", "#{tmtime}", "#{tmdate}").first
现在ILIKE
不够灵活,无法满足我的需求。例如。
我正在尝试搜索John Cooper Clark
并且匹配正常
但是Dr John Cooper Clark
与任何内容都不匹配。尽管John Cooper Clark
确实存在。任何想法为什么这不起作用?以及如何让它发挥作用?
谢谢
萨姆
答案 0 :(得分:0)
您正在寻找full text search
,那种您正在做的事情。
我没有大量的数据库经验,尽管我们已经做了类似的事情:
为了完成上述工作(它仅适用于完整的单词),我们必须使用以下内容:
#app/models/product.rb
class Product < ActiveRecord::Base
def self.search(search)
if Rails.env.production? #PGSQL
basic_search(name: search, description: search).take(5)
else #MYSQL
where("name LIKE ? OR description LIKE ?", "%#{search}%", "%#{search}%").take(5)
end
end
end
basic_search
方法来自Textacular
gem(对于PGSQL)
根据评论,问题不是Ruby而是SQL,它有很多种。
看起来你正在做正确的事;我要说的唯一问题是,如果您使用的是ILIKE
(IE正在使用PGSQL
),那么您最好使用textacular
来执行搜索。< / p>
除此之外,我没有别的东西;如果偏离主题等我将删除答案。