Реализация поиска в приложении Ruby on Rails 3?

Я пишу свое первое приложение Ruby on Rails и вам нужно реализовать функцию поиска. Он должен будет искать базу данных (1 столбец на таблицу в 3 разных таблицах) и возвращать наиболее релевантные результаты в каждой из трех категорий. Как нравится, как вы можете выполнить поиск на Amazon.com, который вернет результаты из всех разных отделов.

Есть ли в мире Ruby on Rails драгоценный камень/library/общая техника, о которой я должен знать (что работает с Rails 3)? В противном случае, что мне делать, чтобы реализовать функцию поиска в моем приложении?

Ответ 1

Я думаю, это зависит от того, насколько серьезно вы относитесь к поиску.

Если вы просто хотите искать в некоторых простых полях VARCHAR, которые вы делали вручную, генерируя некоторые операторы "LIKE" % xyz% ", чем все, что вам нужно, это плагин, который делает это для вас. Мой любимый здесь searchlogic. Это позволяет использовать довольно много удобных динамических областей в ваших моделях, которые вы можете объединить (например, в других областях). Например, вы можете написать примерно следующее:

User.last_name_like("Doe").age_gt(30).age_lt(40)

Здесь отличный скринкаст о том, как использовать другие его функции.

Но SQL LIKE-инструкция не очень подходит для поиска в больших кусках текста. Итак, если это вам нужно, вам будет лучше использовать плагин, который фактически индексирует ваши данные.

В этом случае мышление sphinx (упомянутое в других ответах) - отличное решение. Просто имейте в виду, что для этого требуются определенные шаги установки на платформе и работает только с PostreSQL и MySQL (он не работает с SQLite Rails по умолчанию). Использование этого также не так просто - вам нужно определить, что индексировать на каждой модели, которую вы хотите искать, строить индекс, запускать Sphinx и т.д.

Ответ 2

Вероятно, вам нужно будет использовать некоторую поисковую систему. Взгляните на мыслящий sphinx плагин. Я также использовал act_as_ferret, но это может вызвать некоторые проблемы.

Я не знаю, есть ли плагин, который делает все, что вы хотите для вас. Я бы сделал это следующим образом:

  • Осуществлять поиск (с помощью sql или с помощью некоторой поисковой системы, такой как Sphinx и т.д.).
  • Затем добавьте некоторый материал ajax для автозаполнения.

Google - ваш друг: посмотрите здесь и здесь.