Как реализовать подобный поиск в базе данных с помощью Rails?

#ruby-on-rails #ruby-on-rails-3.1

#ruby-on-rails #ruby-on-rails-3.1

Вопрос:

Я работаю над своим первым веб-сайтом, используя Ruby on Rails. Идея заключается в «поисковой системе» по питанию, в которой вы ищете пищу, а затем веб-приложение выводит вас либо на страницу с информацией о питании для этой пищи, либо на страницу результатов поиска, если точного соответствия не существует.

На данный момент я создал базу данных информации о питании (используя Postgresql) и добавил некоторые тестовые данные. Это команда, которую я использовал для создания каркаса для базы данных:

 rails generate scaffold Food name:string calories:decimal portion_name:string 
portion:decimal image_url:string description:text
  

Затем я создал индексную страницу. Это команда, которую я использовал для создания индекса:

 rails generate controller home index 
  

Я удалил public/index.html и изменил config/routes.rb , чтобы содержать эту строку:

 root :to => 'home#index'
  

После этого я добавил форму поиска в app/views/home/index.html.erb , например, так:

 <div id="search">
  <h1>How many calories are in... ?</h1>
  <%= form_tag("/search", :method => "get") do %>
    <%= text_field_tag "q", nil, :class => "span6" %>
    <%= submit_tag("Go", :name => nil) %>
  <% end %>
</div>
  

Теперь я хотел бы подключить эту форму поиска, чтобы при точном совпадении с поисковым запросом или близком совпадении пользователь перенаправлялся непосредственно на страницу, отображающую информацию (из базы данных) для этого продукта. Если нет точного совпадения, я бы хотел, чтобы пользователю была представлена страница результатов и ссылки на страницу питания для каждого результата.

Как я могу реализовать эту функциональность? Я пробовал искать в Google статьи о реализации поиска с помощью Rails, и я также смотрел скринкаст, но ни один из ресурсов, которые я нашел, не реализует именно то, что я хочу.

Вот ссылка GitHub на проект до сих пор: https://github.com/robertseaton/nutrition-project .

Ответ №1:

Я использую Thinking-Sphinx для поиска в Rails — Sphinx — это поисковый сервер с открытым исходным кодом. Вы можете определить, как вы хотите, чтобы ваш поиск работал прямо в Rails.

Комментарии:

1. Меня интересует поиск только в одном поле, поэтому я думаю, что использование Sphinx было бы излишним.

2. Вы собираетесь индексировать поле? Если вы собираетесь выполнять поиск по любому слову в поле «имя» и если вам нужна масштабируемость, вам нужно сохранить индекс слов в этом поле. Это то, что делает Sphinx (среди прочего). Если вы не индексируете отдельные слова, но хотите выполнить поиск по ним, вы в конечном итоге будете последовательно сканировать каждое слово в этом столбце.

Ответ №2:

Вы также можете использовать sunspot для удовлетворения ваших потребностей в поиске. Вот ссылка sunspot на github https://github.com/sunspot/sunspot .

Используя sunspot, вы можете указать, какие все элементы будут доступны для поиска, например, продукты питания, калории и т. Д., А также присвоить этим элементам различные веса, чтобы, если есть совпадение ключевых слов, скажем, между food и protien, результат которого должен отображаться вверху.

sunspot wiki на github содержит много ресурсов, которые помогут вам начать, и это очень интуитивно понятно для реализации :).

Спасибо,