【问题标题】:Rails: Searching by Category without FullTextRails:在没有全文的情况下按类别搜索
【发布时间】:2010-01-15 01:45:29
【问题描述】:
假设我不想获得运行常量索引所需的 VPS 或专用服务器,例如 Thinking_Sphinx 插件或许多其他用于 ruby on rails 的全文搜索插件。
我在数据库中有一堆带有名称字段和类别字段(除其他外)的列表。
是否可以在没有需要不断索引的全文搜索插件的情况下搜索某个类别的名称?我该怎么做呢?
谢谢。我希望我已经足够清楚了。
【问题讨论】:
标签:
mysql
ruby-on-rails
database
search
【解决方案1】:
如果您只想搜索特定列(或两列),当然可以利用LIKE SQL 运算符。
例如,在 rails 中使用 named_scope
class MyModel < ActiveRecord::Base
named_scope :search, lambda { |query|
{ :conditions => ["category like ?", "%#{query}%"] }
}
end
然后,在您的控制器中,您可以执行类似的操作
@search_results = MyModel.search(params[:query])
这种方法有一些缺点:
- 您只搜索单个列。您可以利用 Ruby 的动态特性将其扩展到更多列,但您肯定不会像使用 sphinx 那样获得索引的优势
- 这适用于较小的数据集。在获得几千行之后,您将开始需要一些体面的索引策略来保持这种速度,否则这种方式的搜索速度会大大减慢。
希望这会有所帮助。如果我误解了这个问题,请告诉我。