Skip to content

Commit

Permalink
Remove advanced search gem
Browse files Browse the repository at this point in the history
- Doing this off of main, since the old branch was getting stale

Co-authored-by: Jane Sandberg <[email protected]>
Co-authored-by: Ryan Laddusaw <[email protected]>
  • Loading branch information
3 people committed Oct 30, 2024
1 parent f4d9a40 commit 53268d5
Show file tree
Hide file tree
Showing 33 changed files with 83 additions and 660 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ coverage/
# Ignore dreaded .DS_Store
.DS_Store

/public/assets
/public/packs
/public/packs-test
/node_modules
Expand Down
29 changes: 2 additions & 27 deletions .reek.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,6 @@ detectors:
- AdvancedHelper#guided_radio
- AdvancedHelper#label_tag_default_for
- AdvancedHelper#param_for_field
- BlacklightAdvancedSearch::ParsingNestingParser#process_query
- BlacklightAdvancedSearch::QueryParser#keyword_op
- BlacklightAdvancedSearch::QueryParser#keyword_queries
- BlacklightAdvancedSearch::QueryParser#prepare_q2
- BlacklightAdvancedSearch::QueryParser#prepare_q3
- ApplicationHelper#action_notes_display
- ApplicationHelper#fast_subjects_value?
- ApplicationHelper#html_safe
Expand All @@ -129,7 +124,6 @@ detectors:
- BlacklightHelper#lccn_resolve
- BlacklightHelper#left_anchor_search?
- BlacklightHelper#oclc_resolve
- BlacklightHelper#prepare_left_anchor_search
- BlacklightHelper#pul_holdings
- BlacklightHelper#wildcard_char_strip
- CatalogHelper#render_search_to_page_title
Expand Down Expand Up @@ -224,13 +218,11 @@ detectors:
- SearchBuilder#add_edismax
- SearchBuilder#advanced_search?
- SearchBuilder#cleanup_boolean_operators
- SearchBuilder#conditionally_configure_json_query_dsl
- SearchBuilder#facets_for_advanced_search_form
- SearchBuilder#numismatics_advanced
- SearchBuilder#numismatics_facets
- SearchBuilder#parslet_trick
- SearchBuilder#q_param_needs_boolean_cleanup
- SearchBuilder#run_advanced_parse?
- SolrDocument#electronic_access_uris
- SolrDocument#holdings_all_display
- SolrDocument#host_id
Expand Down Expand Up @@ -326,6 +318,7 @@ detectors:
- Requests::Submission#print?
- Requests::Submission#selected_items
- Requests::Submissions::HoldItem#payload
- SearchBuilder#facets_for_advanced_search_form
- SearchBuilder#numismatics_advanced
- SearchBuilder#q_param_needs_boolean_cleanup
- SolrDocument#electronic_access_uris
Expand Down Expand Up @@ -360,7 +353,6 @@ detectors:
- ReportBiasedResultsForm
- ReportHarmfulLanguageForm
- SuggestCorrectionForm
- BlacklightAdvancedSearch::QueryParser
- ContactMailer
- Requests::RequestMailer
- Blacklight::Marc::BookCtxBuilder
Expand Down Expand Up @@ -402,6 +394,7 @@ detectors:
- Orangelight::DropdownHelpTextComponent
- Orangelight::FacetFieldCheckboxesComponent
- Orangelight::SearchBarComponent
- Orangelight::SearchContext::ServerItemPaginationComponent
- AccountController
- ApplicationController
- BookmarksController
Expand All @@ -421,8 +414,6 @@ detectors:
- ReportBiasedResultsForm
- ReportHarmfulLanguageForm
- SuggestCorrectionForm
- BlacklightAdvancedSearch::ParsingNestingParser
- BlacklightAdvancedSearch::QueryParser
- ApplicationHelper
- BlacklightHelper
- BookmarksHelper
Expand Down Expand Up @@ -547,7 +538,6 @@ detectors:
exclude:
- Orangelight::ConstraintComponent#constraint_value
- Orangelight::Catalog#email_action
- SearchBuilder#run_advanced_parse?
MissingSafeMethod:
exclude:
- AeonStatus
Expand Down Expand Up @@ -597,7 +587,6 @@ detectors:
- Requests::FormController#mode
- AdvancedHelper#advanced_search_fields
- AdvancedHelper#guided_context
- BlacklightAdvancedSearch::ParsingNestingParser#process_query
- ApplicationHelper#aeon_location?
- ApplicationHelper#alma_location_display
- ApplicationHelper#fast_subjects_value?
Expand Down Expand Up @@ -723,8 +712,6 @@ detectors:
- Requests::FormController#submit
- Users::OmniauthCallbacksController#alma
- ReportHarmfulLanguageForm#submit
- BlacklightAdvancedSearch::ParsingNestingParser#process_query
- BlacklightAdvancedSearch::QueryParser#keyword_queries
- ApplicationHelper#action_notes_display
- ApplicationHelper#location_has
- ApplicationHelper#name_title_hierarchy
Expand Down Expand Up @@ -805,8 +792,6 @@ detectors:
- Requests::Submissions::HoldItem#place_hold
- Requests::Submissions::Recap#handle_hold_for_item
- Requests::Submissions::Recap#handle_item
- SearchBuilder#cleanup_boolean_operators
- SearchBuilder#facets_for_advanced_search_form
- SolrDocument#electronic_access_uris
- SolrDocument#holdings_with_host_id
- SolrDocument#related_bibs_iiif_manifest
Expand All @@ -832,13 +817,9 @@ detectors:
UncommunicativeMethodName:
exclude:
- IndexDocumentComponent#using_blacklight7
- BlacklightAdvancedSearch::QueryParser#prepare_q2
- BlacklightAdvancedSearch::QueryParser#prepare_q3
- Blacklight::Marc::DocumentExtension#marc_record_from_marc21
UncommunicativeParameterName:
exclude:
- BlacklightAdvancedSearch::QueryParser#prepare_q2
- BlacklightAdvancedSearch::QueryParser#prepare_q3
- ApplicationHelper#fast_subjects_value?
- Requests::IlliadMetadata::Metadata#initialize
- Orangelight::LinkToFacetProcessor#link
Expand All @@ -852,8 +833,6 @@ detectors:
- Orangelight::Catalog#online_holding_note?
- AdvancedHelper#advanced_search_fields
- AdvancedHelper#generate_solr_fq
- BlacklightAdvancedSearch::QueryParser#keyword_queries
- BlacklightAdvancedSearch::QueryParser#prepare_q3
- ApplicationHelper#action_notes_display
- ApplicationHelper#html_safe
- ApplicationHelper#location_has
Expand Down Expand Up @@ -911,8 +890,6 @@ detectors:
- ReportBiasedResultsForm#routed_mail_to
- AdvancedHelper#first_search_field?
- AdvancedHelper#first_search_field_selector?
- BlacklightAdvancedSearch::QueryParser#odd_quotes
- BlacklightAdvancedSearch::QueryParser#prep_left_anchor_search
- ApplicationHelper#aeon_location?
- ApplicationHelper#alma_location_display
- ApplicationHelper#bibdata_location_code_to_sym
Expand Down Expand Up @@ -1001,9 +978,7 @@ detectors:
- SolrDocument#doc_by_id
- SolrDocument#ensure_voyager_to_alma_id
- Orangelight::JoinProcessor#direction
- AdvancedSearchConstraint#matches?
- DBMigrateUppercaseUsernames#find_uppercase_users
- DeprecatedAdvancedSearchConstraint#matches?
- EventProcessor::Processor#index
- HoldingRequestsAdapter#alma_location_label_display_bibdata_location
- HoldingRequestsAdapter#alma_location_label_display_holding
Expand Down
2 changes: 0 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ gem 'babel-transpiler'
gem 'bcrypt_pbkdf'
# Blacklight
gem 'blacklight', '~> 7.38.0'
# advanced search functionality
gem 'blacklight_advanced_search', '~> 7.0'
gem 'blacklight_dynamic_sitemap'
gem 'blacklight-marc', '~>8.1'
# slider limit support
Expand Down
5 changes: 0 additions & 5 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,6 @@ GEM
marc-fastxmlwriter
rails
traject (~> 3.0)
blacklight_advanced_search (7.0.0)
blacklight (~> 7.0)
parslet
blacklight_dynamic_sitemap (1.0.0)
blacklight (> 7.0)
rails
Expand Down Expand Up @@ -448,7 +445,6 @@ GEM
parser (3.3.4.2)
ast (~> 2.4.1)
racc
parslet (2.0.0)
pg (1.5.7)
popper_js (1.16.1)
pry (0.14.2)
Expand Down Expand Up @@ -749,7 +745,6 @@ DEPENDENCIES
bcrypt_pbkdf
blacklight (~> 7.38.0)
blacklight-marc (~> 8.1)
blacklight_advanced_search (~> 7.0)
blacklight_dynamic_sitemap
blacklight_range_limit (~> 8.2)
bootstrap (~> 4.6)
Expand Down
1 change: 0 additions & 1 deletion app/components/location_code_facet_component.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# frozen_string_literal: true

class LocationCodeFacetComponent < ViewComponent::Base
include BlacklightAdvancedSearch::AdvancedHelperBehavior
include Blacklight::FacetsHelperBehavior
include ApplicationHelper

Expand Down
7 changes: 2 additions & 5 deletions app/controllers/catalog_controller.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# frozen_string_literal: false

class CatalogController < ApplicationController
include BlacklightAdvancedSearch::Controller
include Blacklight::Catalog

include Blacklight::Marc::Catalog
Expand Down Expand Up @@ -680,9 +679,7 @@ class CatalogController < ApplicationController

config.filter_search_state_fields = true
config.search_state_fields = config.search_state_fields + [
:advanced_type, :f1, :f2, :f3,
:op1, :op2, :op3,
:q1, :q2, :q3, :clause
:advanced_type, :clause
]

config.index.constraints_component = Orangelight::ConstraintsComponent
Expand Down Expand Up @@ -710,7 +707,7 @@ def index
def numismatics
unless request.method == :post
@response = search_service.search_results do |search_builder|
search_builder.except(:add_advanced_search_to_solr).append(:facets_for_advanced_search_form)
search_builder.append(:facets_for_advanced_search_form)
end.first
end
respond_to do |format|
Expand Down
126 changes: 0 additions & 126 deletions app/helpers/advanced_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

# Helper methods for the advanced search form
module AdvancedHelper
include BlacklightAdvancedSearch::AdvancedHelperBehavior

# Fill in default from existing search, if present
# -- if you are using same search fields for basic
# search and advanced, will even fill in properly if existing
Expand Down Expand Up @@ -85,127 +83,3 @@ def first_search_field?(key)
[:q1, :clause_0_query].include? key
end
end

module BlacklightAdvancedSearch
class QueryParser
include AdvancedHelper
def keyword_op
# for guided search add the operations if there are queries to join
# NOTs get added to the query. Only AND/OR are operations
@keyword_op = []
unless @params[:q1].blank? || @params[:q2].blank? || @params[:op2] == 'NOT'
@keyword_op << @params[:op2] if @params[:f1] != @params[:f2]
end
unless @params[:q3].blank? || @params[:op3] == 'NOT' || (@params[:q1].blank? && @params[:q2].blank?)
@keyword_op << @params[:op3] unless [@params[:f1], @params[:f2]].include?(@params[:f3]) && ((@params[:f1] == @params[:f3] && @params[:q1].present?) || (@params[:f2] == @params[:f3] && @params[:q2].present?))
end
@keyword_op
end

def keyword_queries
unless @keyword_queries
@keyword_queries = {}

return @keyword_queries unless @params[:search_field] == ::AdvancedController.blacklight_config.advanced_search[:url_key]

# Spaces need to be stripped from the query because they don't get properly stripped in Solr
q1 = %w[left_anchor in_series].include?(@params[:f1]) ? prep_left_anchor_search(@params[:q1]) : odd_quotes(@params[:q1])
q2 = @params[:f2] == 'left_anchor' ? prep_left_anchor_search(@params[:q2]) : odd_quotes(@params[:q2])
q3 = @params[:f3] == 'left_anchor' ? prep_left_anchor_search(@params[:q3]) : odd_quotes(@params[:q3])

@been_combined = false
@keyword_queries[@params[:f1]] = q1 if @params[:q1].present?
@keyword_queries[@params[:f2]] = prepare_q2(q2) if @params[:q2].present?
@keyword_queries[@params[:f3]] = prepare_q3(q3) if @params[:q3].present?
end
@keyword_queries
end

private

# Remove stray quotation mark if there are an odd number of them
# @param query [String] the query
# @return [String] the query with an even number of quotation marks
def odd_quotes(query)
if query&.count('"')&.odd?
query.sub(/"/, '')
else
query
end
end

# Escape spaces for left-anchor search fields and adds asterisk if not present
# Removes quotation marks
# @param query [String] the query within which whitespace is being escaped
# @return [String] the escaped query
def prep_left_anchor_search(query)
if query
cleaned_query = query.gsub(/(\s)/, '\\\\\\\\\1')
cleaned_query = cleaned_query.delete('"')
cleaned_query = cleaned_query.gsub(/(["\{\}\[\]\^\~\(\)])/, '\\\\\\\\\1')
if cleaned_query.end_with?('*')
cleaned_query
else
cleaned_query + '*'
end
end
end

def prepare_q2(q2)
if @keyword_queries.key?(@params[:f2])
@been_combined = true
"(#{@keyword_queries[@params[:f2]]}) " + @params[:op2] + " (#{q2})"
elsif @params[:op2] == 'NOT'
'NOT ' + q2
else
q2
end
end

def prepare_q3(q3)
if @keyword_queries.key?(@params[:f3])
kq3 = @keyword_queries[@params[:f3]]
kq3 = "(#{kq3})" unless @been_combined
"#{kq3} " + @params[:op3] + " (#{q3})"
elsif @params[:op3] == 'NOT'
'NOT ' + q3
else
q3
end
end
end
end

module BlacklightAdvancedSearch
module ParsingNestingParser
# Iterates through the keyword queries and appends each operator the extracting queries
# @param [ActiveSupport::HashWithIndifferentAccess] _params
# @param [Blacklight::Configuration] config
# @return [Array<String>]
def process_query(_params, config)
if config.advanced_search.nil?
Blacklight.logger.error "Failed to parse the advanced search, config. settings are not accessible for: #{config}"
return []
end

queries = []
ops = keyword_op
keyword_queries.each do |field, query|
query_parser_config = config.advanced_search[:query_parser]
begin
parsed = ParsingNesting::Tree.parse(query, query_parser_config)
rescue Parslet::ParseFailed => parse_failure
Blacklight.logger.warn "Failed to parse the query: #{query}: #{parse_failure}"
next
end

# Test if the field is valid
next unless config.search_fields[field]
local_param = local_param_hash(field, config)
queries << parsed.to_query(local_param)
queries << ops.shift
end
queries.join(' ')
end
end
end
Loading

0 comments on commit 53268d5

Please sign in to comment.