Commit 925fd62d7809a5876cf153dbb72565694378ec52

Authored by Braulio Bhavamitra
1 parent 4a811975

Add solr's 'facets' option support to finders

app/controllers/public/search_controller.rb
... ... @@ -89,7 +89,8 @@ class SearchController < PublicController
89 89 # REFACTOR DUPLICATED CODE inner loop doing the same thing that outter loop
90 90  
91 91 if !@query.blank? || @region && !params[:radius].blank?
92   - @result_ids = @noosfero_finder.find(asset, @query, calculate_find_options(asset, nil, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]).merge({:limit => :all}))
  92 + ret = @noosfero_finder.find(asset, @query, calculate_find_options(asset, nil, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]).merge({:limit => :all}))
  93 + @result_ids = ret.is_a?(Hash) ? ret[:results] : ret
93 94 end
94 95  
95 96 end
... ... @@ -157,12 +158,16 @@ class SearchController < PublicController
157 158 number_of_result_assets = @searching.values.select{|v| v}.size
158 159  
159 160 @results = {}
  161 + @facets = {}
160 162 @order = []
161 163 @names = {}
162 164  
163 165 where_to_search.select { |key,description| @searching[key] }.each do |key, description|
164 166 @order << key
165   - @results[key] = @noosfero_finder.find(key, @query, calculate_find_options(key, limit, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]))
  167 + find_options = calculate_find_options(key, limit, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]);
  168 + ret = @noosfero_finder.find(key, @query, find_options)
  169 + @results[key] = ret.is_a?(Hash) ? ret[:results] : ret
  170 + @facets[key] = ret.is_a?(Hash) ? ret[:facets] : {}
166 171 @names[key] = getterm(description)
167 172 end
168 173  
... ...
app/models/category_finder.rb
... ... @@ -28,10 +28,12 @@ class CategoryFinder
28 28 end
29 29  
30 30 if query.blank?
  31 + options.delete(:facets)
31 32 asset_class(asset).send(finder_method, :all, options_for_find(asset_class(asset), {:order => "#{asset_table(asset)}.name"}.merge(options), date_range))
32 33 else
33 34 pg_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)}
34   - asset_class(asset).find_by_contents(query, pg_options, {}, options_for_find(asset_class(asset), options, date_range))[:results]
  35 + solr_options = {:facets => options.delete(:facets)}
  36 + asset_class(asset).find_by_contents(query, pg_options, solr_options, options_for_find(asset_class(asset), options, date_range))[:results]
35 37 end
36 38 end
37 39  
... ...
app/models/environment_finder.rb
... ... @@ -22,6 +22,8 @@ class EnvironmentFinder
22 22 end
23 23  
24 24 if query.blank?
  25 + options.delete(:facets)
  26 +
25 27 # FIXME this test is in more than one place
26 28 if finder_method == 'paginate'
27 29 options = {:order => "#{asset_table(asset)}.name"}.merge(options)
... ...