From 925fd62d7809a5876cf153dbb72565694378ec52 Mon Sep 17 00:00:00 2001 From: Braulio Bhavamitra Date: Wed, 27 Apr 2011 19:27:18 +0400 Subject: [PATCH] Add solr's 'facets' option support to finders --- app/controllers/public/search_controller.rb | 9 +++++++-- app/models/category_finder.rb | 4 +++- app/models/environment_finder.rb | 2 ++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/controllers/public/search_controller.rb b/app/controllers/public/search_controller.rb index 9a98db4..7cd6082 100644 --- a/app/controllers/public/search_controller.rb +++ b/app/controllers/public/search_controller.rb @@ -89,7 +89,8 @@ class SearchController < PublicController # REFACTOR DUPLICATED CODE inner loop doing the same thing that outter loop if !@query.blank? || @region && !params[:radius].blank? - @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})) + 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})) + @result_ids = ret.is_a?(Hash) ? ret[:results] : ret end end @@ -157,12 +158,16 @@ class SearchController < PublicController number_of_result_assets = @searching.values.select{|v| v}.size @results = {} + @facets = {} @order = [] @names = {} where_to_search.select { |key,description| @searching[key] }.each do |key, description| @order << key - @results[key] = @noosfero_finder.find(key, @query, calculate_find_options(key, limit, params[:page], @product_category, @region, params[:radius], params[:year], params[:month])) + find_options = calculate_find_options(key, limit, params[:page], @product_category, @region, params[:radius], params[:year], params[:month]); + ret = @noosfero_finder.find(key, @query, find_options) + @results[key] = ret.is_a?(Hash) ? ret[:results] : ret + @facets[key] = ret.is_a?(Hash) ? ret[:facets] : {} @names[key] = getterm(description) end diff --git a/app/models/category_finder.rb b/app/models/category_finder.rb index 1514584..2907ce8 100644 --- a/app/models/category_finder.rb +++ b/app/models/category_finder.rb @@ -28,10 +28,12 @@ class CategoryFinder end if query.blank? + options.delete(:facets) asset_class(asset).send(finder_method, :all, options_for_find(asset_class(asset), {:order => "#{asset_table(asset)}.name"}.merge(options), date_range)) else pg_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)} - asset_class(asset).find_by_contents(query, pg_options, {}, options_for_find(asset_class(asset), options, date_range))[:results] + solr_options = {:facets => options.delete(:facets)} + asset_class(asset).find_by_contents(query, pg_options, solr_options, options_for_find(asset_class(asset), options, date_range))[:results] end end diff --git a/app/models/environment_finder.rb b/app/models/environment_finder.rb index 83d15c1..f046969 100644 --- a/app/models/environment_finder.rb +++ b/app/models/environment_finder.rb @@ -22,6 +22,8 @@ class EnvironmentFinder end if query.blank? + options.delete(:facets) + # FIXME this test is in more than one place if finder_method == 'paginate' options = {:order => "#{asset_table(asset)}.name"}.merge(options) -- libgit2 0.21.2