2010-01-15 4 views
0

Допустим, я не хочу, чтобы VPS или выделенный сервер требовали постоянной индексации, например, с плагином Thinking_Sphinx или многими другими плагинами полного текстового поиска для рубинов на рельсах.Rails: Поиск по категориям без FullText

У меня есть группа списков в базе данных с полем «Имя» и поле «Категория» (между прочим).

Возможно ли найти имя в определенной категории без полнотекстового плагина, который требует постоянной индексации? и как я буду заниматься этим?

спасибо. Надеюсь, я был достаточно ясен.

ответ

0

Если вы просто хотите найти конкретный столбец (или два), вы наверняка сможете воспользоваться оператором SQL LIKE.

Например, при использовании в рельсах с named_scope

class MyModel < ActiveRecord::Base 
    named_scope :search, lambda { |query| 
    { :conditions => ["category like ?", "%#{query}%"] } 
    } 
end 

Затем, в контроллерах, вы могли бы сделать что-то вроде

@search_results = MyModel.search(params[:query]) 

Есть несколько недостатков этого подхода:

  1. Вы ищете только один столбец. Вы можете воспользоваться динамической природой Ruby, чтобы расширить ее до большего количества столбцов, но вы определенно не получаете преимущества индекса, как вы бы с sphinx
  2. Это будет отлично работать для небольших наборов данных. После того, как вы получите несколько тысяч строк, вы начнете нуждаться в некоторых достойных стратегиях индексирования, чтобы сохранить это быстро, иначе поиск таким образом значительно замедлит работу.

Надеюсь, это поможет. Если я не понял этот вопрос, дайте мне знать.

+0

спасибо jerhine. Вы ответили, что я искал. Я понимаю, что вы говорите, и спасибо за недостатки. Мне посчастливилось найти эпизод railscasts в расширенных поисках, который также помог мне. http://railscasts.com/episodes/111-advanced-search-form – bob