На хабре уже писали о интеграции Rails с великолепной поисковой системой sphinx
Rails+Sphinx=? Часть I
Rails и Sphinx.
В этой статье постараюсь рассказать о дополнительных возможностях плагина Ultrasphinx
Выносим следующий код в модуль UltrasphinxHelpers и кладем его в «lib/ultrasphinx_helpers.rb»:
В модель прописываем:
Рассмотрим следущий пример:
Если хотим искать только по одному полю:
И на последок, случай если мы хотим искать только среди статей своих друзей:
_________
Текст подготовлен в ХабраРедакторе
Rails+Sphinx=? Часть I
Rails и Sphinx.
В этой статье постараюсь рассказать о дополнительных возможностях плагина Ultrasphinx
Шаг №1: Поиск по тегам
Выносим следующий код в модуль UltrasphinxHelpers и кладем его в «lib/ultrasphinx_helpers.rb»:
В модель прописываем:
Copy Source | Copy HTML
- is_indexed :fields => ['title',"body"], :include => UltrasphinxHelpers::include_tags_configuration(self)
Рассмотрим следущий пример:
Copy Source | Copy HTML
- class Article
- belongs_to :user
- is_indexed :fields => ["name","body","user_id"], :include => UltrasphinxHelpers::include_tags_configuration(self)
- end
-
- Ultrasphinx::Search.new(:query=>"ruby") # будут найдены все записи которые имеют слово "ruby" в поле "name" или "body" или тег "ruby"
-
Если хотим искать только по одному полю:
Copy Source | Copy HTML
- Ultrasphinx::Search.new(:query=>"tag:ruby") #Выдаст только объекты которые затаганы тегом "ruby"
- Ultrasphinx::Search.new(:query=>"name:*sphinx") #Будем искать только по имени, найдется все что содержит в имени слова с суффиксом sphinx
Шаг №2: Поиск только среди определенных записей
И на последок, случай если мы хотим искать только среди статей своих друзей:
Copy Source | Copy HTML
- friends_ids = current_user.friends.map(&:id) #[1,2,5,6,9,12]
- Ultrasphinx::Search.new(:query=>"*sphinx",:filters=>{:user_id=> friends_ids})
_________
Текст подготовлен в ХабраРедакторе