2012-09-13 21 views
0

我已經構建了一個基本的搜索功能,以便在我的數據庫中搜索3個字段。 搜索功能如下:在Rails中搜索,也搜索非連續詞

def self.search(search) 
    if search 
    @search_out = Array.new 
    @prod_out = find(:all, :conditions => ['name ILIKE ? or supplier_code ILIKE ? or ppd_code ILIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"]) 
     @prod_out.each do |prod| 
     prod.quantities.each do |quants| 
      @search_out << quants 
     end 
     end 
     return @search_out 
    else 
    nil 
    end 
end 

現在,它的工作都不錯,但我想補充一點,可以說,我有我的數據庫名稱項,其是「傑克和吉爾電影」和「傑克和選項珍妮特電影「 如果我在搜索字段中寫道:」傑克電影「,它會返回我這兩個條目。總體而言,能夠在搜索字段中搜索單詞並接收那些單詞在其中不連續的條目。 謝謝!

回答

1

好吧,我實際上找到了一個非常簡單的方法來做到這一點。

我在功能加入此之前,「發現」本身:

@arr = search.split(' ') 
@arr.collect! {|x| x + "%" } 
search = @arr.join 

這樣,我加入這給通配符每個單詞之間的「%」,所以現在我能找到該字AREN不一定是連續的,因爲它們之間有一個通配符。

0

我建議你使用MySQL

的正則表達式功能
some_query.where("name REGEXP ?", "#{search.split(' ').join(".*")}") 

你顯然需要在正則表達式中使用它之前過濾掉來自搜索字符串的正則表達式的特殊字符..

mysql documentation about it

+0

您可以使用Regexp.escape(搜索)來轉義輸入。 –

+0

感謝您的輸入,我實際上使用PostgreSQL(因此ILIKE而不是LIKE),所以我會嘗試尋找regexing在那 – Yarneo

0

有一些全功能的搜索引擎,如SolrSphinx,他們可以很容易地通過使用諸如之類的寶石集成到Rails應用程序中210和Thinking Sphinx。 Postgres也有一個內置的搜索引擎,所以它可能更容易設置。這是更強大的,但同時更復雜的解決方案。

如果您想對其中的每一個進行概述,Railscasts是一個很好的資源。