Как мне выполнить полнотекстовый поиск в Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/47656

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Другие советы

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

Вы можете использовать Ferret (Lucene, написанный на Ruby).Он легко интегрируется с Rails с помощью миксина act_as_ferret.Взгляни на "Как интегрировать Ferret с Rails".Альтернативой является Сфинкс.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top