如何使轨道“LIKE”更灵活?

时间:2016-02-13 23:27:47

标签: sql ruby-on-rails

我的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确实存在。任何想法为什么这不起作用?以及如何让它发挥作用?

谢谢

萨姆

1 个答案:

答案 0 :(得分:0)

您正在寻找full text search那种您正在做的事情。

我没有大量的数据库经验,尽管我们已经做了类似的事情:

enter image description here

为了完成上述工作(它仅适用于完整的单词),我们必须使用以下内容:

#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>

除此之外,我没有别的东西;如果偏离主题等我将删除答案。