2016-02-13 31 views
1

我的LIKE查询出现了一个小问题。如何使`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

这不是关于Rails。这是关于SQL的。 –

+0

没有完成我的评论:-(这不是关于Rails,但SQL,我假设。搜索的预期行为是什么? 根据您的数据和要求,你可以做各种事情: *由空白,进行OR操作查询 *使用可用于AR的搜索插件之一(取决于您的DB) *使用外部搜索索引 –

回答

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宝石(对于PGSQL)


01来

根据评论,问题不是Ruby,而是SQL,而且它的风格很多。

看起来你正在做正确的事情;我要说的唯一问题是,如果您使用ILIKE(IE使用PGSQL),那么使用textacular执行搜索可能会更好。

除此之外,我什么也没有;我会删除答案,如果题外话等