Commit 925fd62d7809a5876cf153dbb72565694378ec52
1 parent
4a811975
Exists in
master
and in
22 other branches
Add solr's 'facets' option support to finders
Showing
3 changed files
with
12 additions
and
3 deletions
Show diff stats
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) |