2016-02-13 58 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執行搜索可能會更好。

除此之外,我什麼也沒有;我會刪除答案,如果題外話等