Pull to refresh

Advanced Ultrasphinx: теги и фильтры

Reading time2 min
Views534
На хабре уже писали о интеграции Rails с великолепной поисковой системой sphinx
Rails+Sphinx=? Часть I
Rails и Sphinx.
В этой статье постараюсь рассказать о дополнительных возможностях плагина Ultrasphinx




Шаг №1: Поиск по тегам



Выносим следующий код в модуль UltrasphinxHelpers и кладем его в «lib/ultrasphinx_helpers.rb»:
В модель прописываем:
Copy Source | Copy HTML
  1. is_indexed :fields => ['title',"body"], :include => UltrasphinxHelpers::include_tags_configuration(self)


Рассмотрим следущий пример:

Copy Source | Copy HTML
  1. class Article
  2.     belongs_to :user
  3.     is_indexed :fields => ["name","body","user_id"], :include => UltrasphinxHelpers::include_tags_configuration(self)
  4. end
  5.  
  6. Ultrasphinx::Search.new(:query=>"ruby") # будут найдены все записи которые имеют слово "ruby" в поле "name" или "body" или тег "ruby"
  7.  


Если хотим искать только по одному полю:
Copy Source | Copy HTML
  1. Ultrasphinx::Search.new(:query=>"tag:ruby") #Выдаст только объекты которые затаганы тегом "ruby"
  2. Ultrasphinx::Search.new(:query=>"name:*sphinx") #Будем искать только по имени, найдется все что содержит в имени слова с суффиксом sphinx


Шаг №2: Поиск только среди определенных записей



И на последок, случай если мы хотим искать только среди статей своих друзей:
Copy Source | Copy HTML
  1. friends_ids = current_user.friends.map(&:id) #[1,2,5,6,9,12]
  2. Ultrasphinx::Search.new(:query=>"*sphinx",:filters=>{:user_id=> friends_ids})


_________
Текст подготовлен в ХабраРедакторе

Tags:
Hubs:
Total votes 2: ↑1 and ↓10
Comments0

Articles