【问题标题】:Multiple keywords database search多关键词数据库搜索
【发布时间】:2011-07-29 16:38:47
【问题描述】:

我目前在我的模型中使用范围在数据库中执行搜索。我可以堆叠这些范围,它会输出匹配所有参数的结果。

scope :search_between, lambda{|begin_date, end_date|
  where "sub.date BETWEEN ? AND ?", begin_date, end_date
}

我遇到的问题是集成关键字搜索,它将搜索整个数据库并输出包含关键字总和的结果。我想做这样的事情(为了简单起见):

scope :keywords, lambda{|search|
  search.chomp.split(/,\s*/) do |item|
    where "date like ? or city like ? or state like ?", "%#{item}%" and
    where "date like ? or city like ? or state like ?", "%#{item}%" and
    where "date like ? or city like ? or state like ?", "%#{item}%"
  end
}

我目前正在使用这样的东西来处理搜索多个列:

scope :keywords, lambda{|search|
  search.chomp.split(/,\s*/) do |item|
    where(Sub.column_names.map {|cn| "#{cn} like ?" }.join("or "), "%#{item}%"]  Sub.column_names.size)).join(' AND ')
  end
} 

我的问题是我想在范围内执行多个“where()”。有可能吗?如果有,怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 full-text-search


    【解决方案1】:

    只要把它变成一个返回作用域的方法:

    def self.keywords(search)
      scope = self.scoped
      search.chomp.split(/,\s*/).each do |item|
        scope = scope.where(["date  like ? or 
                              city  like ? or 
                              state like ?", "%#{item}%","%#{item}%","%#{item}%"])
      end
      scope
    end
    
    缺点是您不能将关键字链接到其他范围,但您可以将其他范围链接到关键字。

    【讨论】:

      【解决方案2】:

      我认为使用数据库进行全文搜索会达到极限。

      您是否考虑过使用SolrSphinx 进行全文搜索?如果您想使用第 3 方服务,还有 IndexTank。

      对于 solr,有 ruby​​gems 可以帮助您:sunspotsolrsan(我是作者)

      Sunspot 的功能肯定更全,而 solrsan 是准系统层。

      【讨论】:

      • 老实说,我正在尝试做一些不需要我在服务器上安装任何东西的事情
      猜你喜欢
      • 2014-12-06
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多