Поиск по ключевым словам - PullRequest
0 голосов
/ 05 марта 2012

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

application.html.erb

        <%= form_tag games_path, :method => 'get' do %>
            <%= hidden_field_tag :direction, params[:direction] %>
            <%= hidden_field_tag :sort, params[:sort] %>
            <%= text_field_tag :search, params[:search] %>
        <%= submit_tag t('.searchb'), :game_name => nil %>
        <% end %>

контроллер и модель

        @games = Game.search(params[:search])

  def self.search(search)
     search = search.to_s.strip.split
     search.inject(scoped) do |combined_scope, search|
     combined_scope.where(['game_name LIKE ? OR genre LIKE ? OR console LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"])
    end
  end   

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

например. Если я наберу бой, действие

Я хочу, чтобы он вернул все файтинги и все экшн-игры.

Как бы я поступил в реализации этого? Модель:

EDIT

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Для этого вы должны использовать полнотекстовую поисковую систему, такую ​​как Sphinx! Существует гем под названием thinking-sphinx, который предлагает интерфейс между ruby ​​и сервером Sphinx! Единственным недостатком является то, что вам необходимо периодически обновлять базу данных. Он не поддерживает обновления в реальном времени.

0 голосов
/ 05 марта 2012

Вы должны взять ключевые слова, зациклить их и создать запросы для достижения этой цели. Вы можете использовать инъекцию, чтобы сделать это легко. Это может помочь.

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