0

我已经建立了一个基本的搜索功能,以便在我的数据库中搜索 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

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

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

4

3 回答 3

1

好吧,我实际上找到了一个非常简单的方法来做到这一点。

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

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

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

于 2012-09-19T14:30:29.657 回答
0

我建议使用 Mysql 的 Regexp 功能

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

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

关于它的mysql文档

于 2012-09-13T12:15:11.367 回答
0

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

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

于 2012-09-13T12:47:32.020 回答