From 31955a890253eaf2010aebe259f2ada4a7356c95 Mon Sep 17 00:00:00 2001 From: Eran H Date: Fri, 14 Feb 2014 21:27:54 +0200 Subject: [PATCH 1/2] Refactor solr_facet_params - Removed override after calling solr_search_params --- lib/blacklight/configuration.rb | 4 ++-- lib/blacklight/solr_helper.rb | 21 ++++++++++++++------- spec/lib/blacklight/solr_helper_spec.rb | 4 ++-- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/blacklight/configuration.rb b/lib/blacklight/configuration.rb index c40c1f6199..47c92fe76e 100644 --- a/lib/blacklight/configuration.rb +++ b/lib/blacklight/configuration.rb @@ -100,8 +100,8 @@ def add_field_configuration_to_solr_request! self.add_field_configuration_to_solr_request = true end - def facet_fields_to_add_to_solr - return facet_fields.reject { |k,v| v[:query] || v[:pivot] }.map { |k,v| v.field } if self.add_facet_fields_to_solr_request + def facet_fields_to_add_to_solr required_facet_fields = facet_fields + return required_facet_fields.reject { |k,v| v[:query] || v[:pivot] }.map { |k,v| v.field } if self.add_facet_fields_to_solr_request [] end diff --git a/lib/blacklight/solr_helper.rb b/lib/blacklight/solr_helper.rb index 71c31d6f57..bc60720742 100644 --- a/lib/blacklight/solr_helper.rb +++ b/lib/blacklight/solr_helper.rb @@ -298,13 +298,21 @@ def add_facetting_to_solr(solr_parameters, user_params) solr_parameters[:"facet.field"].concat( [user_params["facet.field"], user_params["facets"]].flatten.compact ).uniq! end + # Add all facets to solr_parameters defined by blacklight_config, + # unless 'facet.fields' is set - if yes, return only those facet fields. + if user_params.has_key?(:'facet.fields') + required_facets_names = user_params[:'facet.fields'] + required_facet_fields = blacklight_config.facet_fields.select { |k,v| required_facets_names.include?(k) } + else + required_facet_fields = blacklight_config.facet_fields + end if blacklight_config.add_facet_fields_to_solr_request solr_parameters[:facet] = true - solr_parameters.append_facet_fields blacklight_config.facet_fields_to_add_to_solr + solr_parameters.append_facet_fields blacklight_config.facet_fields_to_add_to_solr(required_facet_fields) end - blacklight_config.facet_fields.each do |field_name, facet| + required_facet_fields.each do |field_name, facet| if blacklight_config.add_facet_fields_to_solr_request case @@ -488,14 +496,13 @@ def get_solr_response_for_field_values(field, values, extra_solr_params = {}) def solr_facet_params(facet_field, user_params=params || {}, extra_controller_params={}) input = user_params.deep_merge(extra_controller_params) facet_config = blacklight_config.facet_fields[facet_field] - + + # Will make :add_facetting_to_solr return only facets in this array + user_params[:'facet.fields'] = [facet_field] + # First start with a standard solr search params calculations, # for any search context in our request params. solr_params = solr_search_params(user_params).merge(extra_controller_params) - - # Now override with our specific things for fetching facet values - solr_params[:"facet.field"] = with_ex_local_param((facet_config.ex if facet_config.respond_to?(:ex)), facet_field) - limit = if respond_to?(:facet_list_limit) diff --git a/spec/lib/blacklight/solr_helper_spec.rb b/spec/lib/blacklight/solr_helper_spec.rb index d90a56531f..ffd39e492c 100644 --- a/spec/lib/blacklight/solr_helper_spec.rb +++ b/spec/lib/blacklight/solr_helper_spec.rb @@ -490,7 +490,7 @@ def params expect(@generated_solr_facet_params[:rows]).to eq 0 end it 'sets facets requested to facet_field argument' do - expect(@generated_solr_facet_params["facet.field".to_sym]).to eq @facet_field + expect(@generated_solr_facet_params["facet.field".to_sym]).to eq [@facet_field] end it 'defaults offset to 0' do expect(@generated_solr_facet_params[:"f.#{@facet_field}.facet.offset"]).to eq 0 @@ -542,7 +542,7 @@ def facet_list_limit solr_search_params.each_pair do |key, value| # The specific params used for fetching the facet list we # don't care about. - next if ['facets', "facet.field", 'rows', 'facet.limit', 'facet.offset', 'facet.sort'].include?(key) + next if ['facets', 'facet.field', 'rows', 'facet.limit', 'facet.offset', 'facet.sort'].include?(key) # Everything else should match expect(solr_facet_params[key]).to eq value end From d44c6f82f9526281bd7779742d02963901879a40 Mon Sep 17 00:00:00 2001 From: Eran H Date: Sat, 15 Feb 2014 10:55:42 +0200 Subject: [PATCH 2/2] Fixed one of solr_facet_params test --- spec/lib/blacklight/solr_helper_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/lib/blacklight/solr_helper_spec.rb b/spec/lib/blacklight/solr_helper_spec.rb index ffd39e492c..85563a0f93 100644 --- a/spec/lib/blacklight/solr_helper_spec.rb +++ b/spec/lib/blacklight/solr_helper_spec.rb @@ -543,6 +543,9 @@ def facet_list_limit # The specific params used for fetching the facet list we # don't care about. next if ['facets', 'facet.field', 'rows', 'facet.limit', 'facet.offset', 'facet.sort'].include?(key) + # The specific params for other facet fields than 'format' (like f.facet_ordered.facet.sort = 'count') + # we don't care about, they will return in #solr_search_params but not in #solr_facet_params + next if (key.include?('format_ordered') || key.include?('format_limited')) # Everything else should match expect(solr_facet_params[key]).to eq value end