Search code examples
ruby-on-railsruby-on-rails-3postgresqlfull-text-searchpg-search

Is there a way to use facets with the pg_search gem


I'd like to use facets in plus of standard search. Is there a way to make search results be itself "searched" with facets using pg_search?

As far as I can tell, pg_search_scope are mutually exclusive (is there a workaround?). Thanks!

Example:

1) search blogs with word "test"

2) click link to get only articles from previous result that were also posted in june


Solution

  • I'm the original author and maintainer of pg_search.

    A pg_search_scope works like any other Active Record scope, so you can chain them.

    So let's say you have a model Blog with a pg_search_scope named search_title and another scope named in_month that takes two parameters, a month number and a year number. Something like this:

    class Blog < ActiveRecord::Base
      include PgSearch
      pg_search_scope :search_title, :against => :title
      scope :in_month, lambda { |month_number, year_number| 
        where(:month => month_number, :year => year_number)
      }
    end
    

    Then you can call it like this:

    Blog.search_title("broccoli").in_month(6, 2011)
    

    The reverse should also work:

    Blog.in_month(6, 2011).search_title("broccoli")
    

    And pagination solutions like Kaminari could also be called on the end.