2009-06-23 7 views
4

У меня есть небольшой сайт с около 500 фотографиями и 150 посетителями в день, который размещен на Dreamhost. Я хотел бы добавить простую поисковую систему, которая делает не нужно запускать длительные процессы, которые не разрешены на общем хосте.Поиск в Ruby On Rails

Поисковая система должна обрабатывать различные поля, принадлежащей к различным моделям: Фото, Photo.author.name, Photo.comments.content и многим другим

Есть ли плагин, который может помочь?

ответ

4

Функция полнотекстового поиска MySQL, которая обычно доступна в любой общедоступной среде хостинга, - отличный способ добавить эту функциональность. Единственным недостатком является то, что он работает только на таблицах MyISAM, которые, как правило, устарели в пользу InnoDB.

Подход, который я видел, является отличным примером архитектуры базы данных Википедии, заключается в создании производных копий записей моделей специально для поисковых целей. Их необходимо синхронизировать с основной записью, но это легко сделать с помощью обработчика after_save или простого оператора обновления SQL.

Следует отметить, что ActiveRecord не способен понимать полнотекстовые индексы. Довольно некрасиво расширение требуется, чтобы сделать это сотрудничество, хотя у меня есть пример укутан в коллекции MySQL взламывает:

http://github.com/theworkinggroup/rails_mysql_hacks/tree/master

1

acts_as_ferret, скорее всего, послужит вам хорошо.

Но я не знаю, и как хорек будет работать на установке, как ваша.

+0

У меня создалось впечатление, что Феррет бежал как фоновый процесс. – tadman

+0

Кто-нибудь знает, нужен ли Ferret фоновый процесс? – collimarco

+0

Вам нужно запустить сервер DRb в процессе производства. Феррет - это дерьмо, и вы должны искать что-то еще, у которого не так много проблем. –

0

Вы можете захотеть взглянуть на Сфинкс/Thinking Sphinx для быстрого полного текста поиск.

Thinking Sphinx

Я не знаю, если установка Unix пакетов и весь этот процесса является излишним за то, что вы ищете на Dreamhost, но это очень быстрое и надежное решение, которое будет служить вашим потребностям хорошо в будущее.

+0

Sphinx работает очень хорошо, но ему нужен демон :( – collimarco

1

Ferret or sphinx WELL нужен выделенный фоновый процесс. Ваш единственный вариант выглядит как полный текстовый поиск mysql с соответствующими индексами.

3

Есть по крайней мере 3 полнотекстовые поисковые системы для Rails:

Какой является лучшим выбором? Это зависит. Here Вы можете прочитать сравнение sphinx и ferret, включая комментарий от Engine Yard.

+0

Все они требуют фоновых процессов ... – collimarco

2

Я думаю, что плагин acts_as_indexed - лучший выбор для ваших нужд. Он не требует отдельного сервера; он автоматически создает свой индекс в файловой системе. На сайте, подобном вашему, его было достаточно быстро и легко настроить.