Как мне выполнить полнотекстовый поиск в Ruby on Rails? - PullRequest
10 голосов
/ 06 сентября 2008

Я бы хотел выполнить полнотекстовый поиск данных в моем приложении Ruby on Rails. Какие варианты существуют?

Ответы [ 7 ]

19 голосов
/ 06 сентября 2008

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

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

acts_as_tsearch предлагает оболочку для аналогичных встроенных функций для последних версий PostgreSQL

Для других баз данных вам придется использовать другое программное обеспечение.

Lucene - это популярный поисковый сервис, написанный на Java. Вы можете использовать Lucene через его поисковый сервер Solr с Rails, используя acts_as_solr.

Если вы не хотите использовать Java, есть порт Lucene для Ruby с именем Ferret . Поддержка Rails добавлена ​​с помощью плагина acts_as_ferret.

Xapian - еще один хороший вариант, который поддерживается в Rails с использованием плагина acts_as_xapian.

Наконец, мой предпочтительный выбор - Sphinx с использованием плагина Ultrasphinx . Он очень быстрый и имеет много опций для индексирования и поиска в ваших базах данных, но больше не поддерживается.

Еще один плагин для Sphinx - это Thinking Sphinx , который имеет много положительных отзывов . Немного проще начать использовать Thinking Sphinx, чем Ultrasphinx. Я бы посоветовал изучить оба плагина, чтобы определить, какой из них лучше подходит для вашего проекта.

7 голосов
/ 06 сентября 2008

Я могу порекомендовать Сфинкса. У Райана Бейтса есть отличная заставка об использовании плагина Thinking Sphinx для создания полнотекстового поиска.

5 голосов
/ 06 сентября 2008

Вы можете использовать Ferret (это Lucene, написанный на Ruby). Он полностью интегрируется с Rails, используя mixin act_as_ferret. Взгляните на « Как интегрировать хорька с рельсами ». Альтернативой является Sphinx .

1 голос
/ 29 августа 2009

Я бы порекомендовал act_as_ferret, поскольку я использую его для проекта Scrumpad на работе Индексация может выполняться как отдельный процесс, который гарантирует, что при повторной индексации мы все еще можем использовать наше приложение. Это может сократить время простоя сайта. Также поиск намного быстрее. Вы можете выполнять поиск по нескольким моделям одновременно, и ваши результаты сортируются по полям, которые вы предпочитаете.

1 голос
/ 11 марта 2009

Просто примечание для дальнейшего использования: Ultra Sphinx больше не поддерживается. Думающий сфинкс - его замена. Хотя в настоящее время в нем отсутствуют некоторые функции, такие как выдержка, которую имел Ultra sphinx, он компенсирует это другими функциями.

1 голос
/ 23 сентября 2008

Это зависит от того, какую базу данных вы используете. Я бы порекомендовал использовать Solr, поскольку он предлагает много хороших вариантов. Недостатком является то, что вы должны запустить отдельный процесс для него. Я также использовал Ferret, но обнаружил, что он менее стабилен с точки зрения многопоточного доступа к индексу. Я не пробовал Sphinx, потому что он работает только с MySQL и Postgres.

1 голос
/ 16 сентября 2008

Я составлял список различных параметров поиска Ruby on Rails в этом другом вопросе . Я не уверен, как или если объединить наши вопросы.

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