ruby on rails-编写一个松散匹配的搜索方法



我刚刚看了关于一个简单搜索表单的railscast,我想在我的应用程序中做一些类似的事情,但我不想只找到完全匹配的结果。

我有一个名为Project的模型,具有以下字段:

  • CCD_ 2
  • CCD_ 3
  • keyword1
  • keyword2

给定从railscast获取的代码:

models/project.rb
def self.search(search)
    if search
        find( :all, :conditions => ['name LIKE ?', "%#{search}%"] )
    else
        find(:all)
    end
end

如果我想搜索"Pizza",并且我希望它能将一个名为"MasterPizza project"的项目与关键字1=>"MasterPiza"和关键字2=>"Pizzia"相匹配,我该如何重构上面的代码?

另外,区分大小写是个问题吗?

还有一个railscast,Ryan Bates谈到了利用Sphinx进行全文搜索。我强烈推荐这样一种方法,而不是从头开始:

http://railscasts.com/episodes/120-thinking-sphinx

您需要将查询拆分为多个原子,将每个原子作为单独的查询运行,然后合并每个原子的结果。

在这一点上,事情变得相当复杂,你最好使用一个搜索库,比如Acts as Indexed,它可以为你处理所有这些。

[披露]我是《索引行为》一书的作者。

查看Metasearch和Metawhere宝石。

我不太理解你的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    

相关内容

  • 没有找到相关文章

最新更新