Столкнувшись с такой проблемой, я решил использовать возможности полнотекстового поиска MySQL. Что вы можете сделать, так это вставить весь ваш «доступный для поиска» контент в специальную таблицу MyISAM, составленную из других.
Поскольку обслуживание зависимых от поиска записей является проблемой, особенно в Rails, было проще добавить триггеры, которые обрабатывали внутреннюю репликацию, чем делать это как вызов after_save или after_destroy.
Хотя это не гем или плагин, и введение триггеров полностью сбивает с толку дампер Rails-схемы, заставляя переключиться на формат .sql вместо .rb, но он работает на удивление хорошо. В основном это просто «работает», так что вам не нужно слишком беспокоиться об этом, хотя для существенного изменения схемы может потребоваться время от времени перестраивать триггеры.
Концепция триггера довольно проста, мало чем отличается от обратных вызовов ActiveRecord: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
Это усовершенствование технологии, используемой программным обеспечением Mediawiki для предоставления полнотекстового поискового индекса вики-контента, хранящегося, как правило, в InnoDB.