我刚刚看过有关simple search form的关于我的应用,我想在我的应用中做类似的事情,但我不想找到完全匹配的结果。
我有一个名为Project
的模型,其中包含以下字段:
name
,description
,keyword1
和keyword2
。鉴于从railscast获取的代码:
models/project.rb
def self.search(search)
if search
find( :all, :conditions => ['name LIKE ?', "%#{search}%"] )
else
find(:all)
end
end
如果我想搜索“Pizza”,我希望它与一个名为“Master Pizza Project”的项目匹配keyword1 => “MasterPizza”和keyword2 => “披萨”,我将如何重构上述代码?
另外,区分大小写是一个问题吗?
答案 0 :(得分:0)
Ryan Bates还谈到了利用Sphinx进行全文搜索的另一个轨道广播。我强烈推荐这种方法,而不是从头做事:
答案 1 :(得分:0)
您需要将查询拆分为原子,将每个原子作为单独的查询运行,然后合并每个原子的结果。
此时事情变得相当复杂,你最好使用像Acts as Indexed这样的搜索库来处理这一切。
[披露]我是Acts as Indexed的作者。
答案 2 :(得分:0)
查看Metasearch和Metawhere宝石。
答案 3 :(得分:0)
我不太了解你的q,但我希望这是有道理的:
def self.search(search)
if search
where('title LIKE ? OR keyword1 LIKE ? OR keyword2 LIKE ?',"%#{search}%", "%#{search}%","%#{search}%")
# find(:all, :conditions => ['title LIKE ?', "%#{search}%"])
else
all
end
end