2009-11-18 2 views
2

Я пытаюсь выяснить, как добавить поиск в мое приложение rails. Я совершенно новый, так что медленно. Я создал блог и сделал немало настроек, включая добавление AJAX, до сих пор очень горжусь собой. У меня возникли проблемы с поиском каких-либо хороших руководств о том, как добавить эту функциональность. В основном я просто хочу включить полный поиск для поиска моей таблицы сообщений. Каков самый простой способ сделать это?Добавление поиска в Ruby on Rails - простой вопрос

ответ

6

Отличный Railscast на Thinking Sphinx, который является моим фаворитом выше других указанных вариантов. Это быстро, просто и continually being developed.

Существует также SearchLogic, который отлично подходит, если вам не нужна полная индексация текста (вы, вероятно, не для блога). И Railscast, чтобы согласиться с этим.

+0

Привет, bensie! Любите свой древний ответ;) –

5

В зависимости от используемой СУБД может быть встроенное решение для полнотекстового поиска.

В противном случае вы можете проверить SunspotRails plugin), который использует Apache Solr для поиска полнотекстового и проста в использовании. Особенно писать запросы/поиски гораздо веселее, чем со стандартным плагином acts_as_solr.

Редактировать О, а вот это screencast on Sunspot для визуальных людей.

+1

Я пробовал Sphinx, Ferret и Solr, и я должен сказать, Sunspot + Solr - лучший матч. –

3

Я предлагаю использовать плагин acts_as_solr. Я только начинаю с Rails, и это плагин индексации поиска, рекомендованный моим профессором. Он включает поисковую систему SOLR в плагине. Сайт содержит инструкции по установке и использованию.

В основном, как показывает использование, вы просто включаете тег act_as_solr в зависимости от того, какие модели вы хотите искать, а затем укажите, какие атрибуты в вашей модели вы хотите индексировать для поиска ... так что вы сделать что-то вроде:

class Post < ActiveRecord::Base 
    acts_as_solr :fields => [:post, :comments, :whatever] 

И для поиска вы могли бы сделать что-то вроде ...

Post.find_by_solr(query_string) 
+0

Поскольку 'act_as_solr' больше не поддерживается (выступая в качестве де-факто сопровождающего), я бы не рекомендовал его использовать. Sunspot - намного лучший вариант для Solr. –

0

Самый простой способ сделать это было бы сделать что-то вроде этого:

results = Post.find (: all,: conditions => "post_body LIKE '% # {search_string}%'")

Однако это довольно ограниченно, поскольку он будет искать только точное слово или фразу (не говоря уже об уязвимости SQL-инъекции). Как я уже упоминал, это самый простой способ сделать поиск, но, безусловно, не самый лучший. Я бы рассмотрел использование act_as_solr, если вы хотите сделать это серьезно.

+1

Если вы хотите сохранить его как можно проще, попробуйте его: conditions => ["post_body LIKE '%?%'", Search_string], который по крайней мере защищает вас от уязвимостей SQL-инъекций :-) – webmat

Смежные вопросы