Skip to content

Commit

Permalink
Merge pull request #4678 from pulibrary/no-add-facet-fields-to-solr-r…
Browse files Browse the repository at this point in the history
…equest

Simplify query for facet more link
  • Loading branch information
christinach authored Jan 2, 2025
2 parents 3f463e5 + 8ca93be commit 3a3c75b
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 1 deletion.
21 changes: 20 additions & 1 deletion app/models/search_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class SearchBuilder < Blacklight::SearchBuilder
only_home_facets prepare_left_anchor_search
series_title_results pul_holdings html_facets
numismatics_facets numismatics_advanced
adjust_mm]
adjust_mm remove_unneeded_facets]

# mutate the solr_parameters to remove words that are
# boolean operators, but not intended as such.
Expand Down Expand Up @@ -107,6 +107,18 @@ def adjust_mm(solr_parameters)
solr_parameters['mm'] = 0
end

# When the user is viewing the values of a specific facet
# by clicking the "more" link in a facet, solr doesn't
# need to perform expensive calculations related to other
# facets that the user is not displaying
# :reek:FeatureEnvy
def remove_unneeded_facets(solr_parameters)
return unless facet
remove_unneeded_stats(solr_parameters)
solr_parameters.delete('facet.pivot') unless solr_parameters['facet.pivot']&.split(',')&.include? facet
solr_parameters.delete('facet.query') unless solr_parameters['facet.query']&.any? { |query| query.partition(':').first == facet }
end

private

def search_query_present?
Expand Down Expand Up @@ -137,4 +149,11 @@ def add_edismax(advanced_fields:)
blacklight_config.search_fields[field]['clause_params'] = { edismax: }
end
end

# :reek:FeatureEnvy
def remove_unneeded_stats(solr_parameters)
return if solr_parameters['stats.field'].to_a.include? facet
solr_parameters.delete('stats')
solr_parameters.delete('stats.field')
end
end
69 changes: 69 additions & 0 deletions spec/models/search_builder_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -169,4 +169,73 @@
end
end
end

describe '#remove_unneeded_facets' do
let(:blacklight_config) do
Blacklight::Configuration.new do |config|
config.add_facet_field 'pub_date_start_sort', label: 'Publication year', single: true, range: {
num_segments: 10,
assumed_boundaries: [1100, Time.zone.now.year + 1],
segments: true
}
config.add_facet_field 'classification_pivot_field', label: 'Classification', pivot: %w[lc_1letter_facet lc_rest_facet]
config.add_facet_field 'recently_added_facet', label: 'Recently added', home: true, query: {
weeks_one: { label: 'Within 1 week', fq: 'cataloged_tdt:[NOW/DAY-7DAYS TO NOW/DAY+1DAY]' },
weeks_two: { label: 'Within 2 weeks', fq: 'cataloged_tdt:[NOW/DAY-14DAYS TO NOW/DAY+1DAY]' }
}
end
end
context 'when viewing a facet that is not a pivot or stats facet' do
before { search_builder.facet('language_facet') }
it 'removes expensive stats configuration' do
solr_parameters = { 'stats' => true, 'stats.field' => ['pub_date_start_sort'] }
search_builder.remove_unneeded_facets(solr_parameters)
expect(solr_parameters.keys).not_to include 'stats'
expect(solr_parameters.keys).not_to include 'stats.field'
end
it 'removes expensive facet.pivot configuration' do
solr_parameters = { 'facet.pivot' => 'lc_1letter_facet,lc_rest_facet' }
search_builder.remove_unneeded_facets(solr_parameters)
expect(solr_parameters.keys).not_to include 'facet.pivot'
end
it 'removes expensive facet.query configuration' do
solr_parameters = { 'facet.query' => ['cataloged_tdt:[NOW/DAY-7DAYS+TO+NOW/DAY+1DAY]'] }
search_builder.remove_unneeded_facets(solr_parameters)
expect(solr_parameters.keys).not_to include 'facet.query'
end
end
context 'when viewing a stats facet' do
before { search_builder.facet('pub_date_start_sort') }
it 'keeps the stats configuration' do
solr_parameters = { 'stats' => true, 'stats.field' => ['pub_date_start_sort'] }
search_builder.remove_unneeded_facets(solr_parameters)
expect(solr_parameters['stats']).to be true
expect(solr_parameters['stats.field']).to eq ['pub_date_start_sort']
end
end
context 'when viewing a pivot facet' do
before { search_builder.facet('lc_1letter_facet') }
it 'keeps the facet.pivot configuration' do
solr_parameters = { 'facet.pivot' => 'lc_1letter_facet,lc_rest_facet' }
search_builder.remove_unneeded_facets(solr_parameters)
expect(solr_parameters['facet.pivot']).to eq 'lc_1letter_facet,lc_rest_facet'
end
end
context 'when viewing a facet that needs a facet.query' do
before { search_builder.facet('cataloged_tdt') }
it 'keeps the facet.query configuration' do
solr_parameters = { 'facet.query' => ['cataloged_tdt:[NOW/DAY-7DAYS+TO+NOW/DAY+1DAY]'] }
search_builder.remove_unneeded_facets(solr_parameters)
expect(solr_parameters['facet.query']).to eq ['cataloged_tdt:[NOW/DAY-7DAYS+TO+NOW/DAY+1DAY]']
end
end
context 'when we are not doing a facet view' do
it 'does not modify the solr_parameters' do
solr_parameters = { 'stats' => true, 'stats.field' => ['pub_date_start_sort'] }
expect do
search_builder.remove_unneeded_facets(solr_parameters)
end.not_to change { solr_parameters }
end
end
end
end

0 comments on commit 3a3c75b

Please sign in to comment.