我已经构建了一个基本搜索功能,以便在我的数据库中搜索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
现在它工作得很好,但我想添加一个选项,让我说我的数据库中有名称条目,分别是“杰克和吉尔电影”和“杰克和珍妮特电影” 如果我在搜索栏中写道:“杰克电影”,它将返回我这两个条目。
总体而言,能够搜索搜索字段中的单词并接收这些单词在其中不连续的条目。 谢谢!
答案 0 :(得分:1)
好吧我实际上找到了一种非常简单的方法。
我在“查找”之前在我的函数中添加了这个:
@arr = search.split(' ')
@arr.collect! {|x| x + "%" }
search = @arr.join
这样我就会在每个单词之间加一个'%'来给出一个通配符,所以现在我可以找到不一定是连续的单词,因为它们之间有一个通配符。
答案 1 :(得分:0)
我建议使用Mysql的Regexp功能
some_query.where("name REGEXP ?", "#{search.split(' ').join(".*")}")
您显然需要在搜索字符串中过滤掉正则表达式特殊字符,然后才能在正则表达式中使用它。
答案 2 :(得分:0)
有一些功能齐全的搜索引擎,例如Solr和Sphinx,可以使用Sunspot和Thinking Sphinx等宝石轻松将它们集成到Rails应用中。 Postgres还有一个内置的搜索引擎,所以它可能更容易设置。这是更强大但同时更复杂的解决方案。
如果您想了解每一个,Railscasts是一个很好的资源。