在Rails中搜索,也搜索非连续的单词

时间:2012-09-13 11:54:50

标签: ruby-on-rails

我已经构建了一个基本搜索功能,以便在我的数据库中搜索3个字段。 搜索功能如下:

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

现在它工作得很好,但我想添加一个选项,让我说我的数据库中有名称条目,分别是“杰克和吉尔电影”和“杰克和珍妮特电影” 如果我在搜索栏中写道:“杰克电影”,它将返回我这两个条目。

总体而言,能够搜索搜索字段中的单词并接收这些单词在其中不连续的条目。 谢谢!

3 个答案:

答案 0 :(得分:1)

好吧我实际上找到了一种非常简单的方法。

我在“查找”之前在我的函数中添加了这个:

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

这样我就会在每个单词之间加一个'%'来给出一个通配符,所以现在我可以找到不一定是连续的单词,因为它们之间有一个通配符。

答案 1 :(得分:0)

我建议使用Mysql的Regexp功能

some_query.where("name REGEXP ?", "#{search.split(' ').join(".*")}")

您显然需要在搜索字符串中过滤掉正则表达式特殊字符,然后才能在正则表达式中使用它。

mysql documentation about it

答案 2 :(得分:0)

有一些功能齐全的搜索引擎,例如SolrSphinx,可以使用SunspotThinking Sphinx等宝石轻松将它们集成到Rails应用中。 Postgres还有一个内置的搜索引擎,所以它可能更容易设置。这是更强大但同时更复杂的解决方案。

如果您想了解每一个,Railscasts是一个很好的资源。