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