Поиск по множеству разных столбцов в разных таблицах в Rails - PullRequest
1 голос
/ 09 января 2010

Мне нужно обеспечить какой-то глобальный поиск по большинству данных, которые есть в моем приложении. Данные распределены по разным таблицам, таким как пользователи, комментарии и т. Д. В MySQL.

Я хочу справиться с этим в приложении, не с чем-то вроде пользовательского поиска Google.

Моя идея состоит в том, чтобы создать таблицу, в которой будут столбцы типа source id и data с полнотекстовым индексом data, а затем каким-то образом собрать все данные в таблицу.

Есть ли лучший способ реализовать это? Желательно с гемом или плагином?

Ответы [ 3 ]

3 голосов
/ 09 января 2010

Я бы порекомендовал исследовать камень Thinking Sphinx , который представляет собой интерфейс Ruby к полнотекстовой поисковой системе Sphinx .

2 голосов
/ 09 января 2010

Я использовал act_as_solr (http://acts -as-solr.rubyforge.org / ) для добавления текстового поиска по различным моделям в проектах Rails. Вы просто помечаете модели и свойства, которые вас интересуют при индексации, а плагин обрабатывает все остальное.

0 голосов
/ 09 января 2010

Столкнувшись с такой проблемой, я решил использовать возможности полнотекстового поиска 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...