Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3679 remove advanced search gem #4193

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -145,9 +145,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 @@ -414,7 +411,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 @@ -706,7 +702,6 @@ DEPENDENCIES
bixby (~> 5.0)
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
9 changes: 2 additions & 7 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 @@ -674,11 +673,7 @@ class CatalogController < ApplicationController
config.add_results_document_tool(:bookmark, partial: 'bookmark_control')

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
]
config.search_state_fields = config.search_state_fields + [:advanced_type, :clause]

config.index.constraints_component = Orangelight::ConstraintsComponent

Expand All @@ -705,7 +700,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
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
2 changes: 1 addition & 1 deletion app/helpers/blacklight_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ def lccn_resolve(lccn)

# Links to correct advanced search page based on advanced_type parameter value
def edit_search_link
url = BlacklightAdvancedSearch::Engine.routes.url_helpers.advanced_search_path(params.permit!.except(:controller, :action).to_h)
url = advanced_path(params.permit!.except(:controller, :action).to_h)
if params[:advanced_type] == 'numismatics'
url.gsub('/advanced', '/numismatics')
else
Expand Down
4 changes: 1 addition & 3 deletions app/models/search_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
class SearchBuilder < Blacklight::SearchBuilder
include Blacklight::Solr::SearchBuilderBehavior
include BlacklightRangeLimit::RangeLimitBuilder
include BlacklightAdvancedSearch::AdvancedSearchBuilder
include BlacklightHelper

default_processor_chain.unshift(:conditionally_configure_json_query_dsl)

self.default_processor_chain += %i[parslet_trick cleanup_boolean_operators add_advanced_search_to_solr
self.default_processor_chain += %i[parslet_trick cleanup_boolean_operators
cjk_mm wildcard_char_strip excessive_paging_error
only_home_facets prepare_left_anchor_search
series_title_results pul_holdings html_facets
Expand All @@ -17,7 +16,6 @@ class SearchBuilder < Blacklight::SearchBuilder
# mutate the solr_parameters to remove words that are
# boolean operators, but not intended as such.
def cleanup_boolean_operators(solr_parameters)
return add_advanced_parse_q_to_solr(solr_parameters) if run_advanced_parse?(solr_parameters)
solr_parameters[:q] = cleaned_query(solr_parameters[:q])
return solr_parameters unless using_json_query_dsl(solr_parameters)

Expand Down
6 changes: 0 additions & 6 deletions app/services/advanced_search_constraint.rb

This file was deleted.

6 changes: 0 additions & 6 deletions app/services/deprecated_advanced_search_constraint.rb

This file was deleted.

16 changes: 0 additions & 16 deletions app/views/advanced/_advanced_search_facets_as_select.html.erb

This file was deleted.

4 changes: 0 additions & 4 deletions app/views/advanced/_advanced_search_submit_btns.html.erb

This file was deleted.

19 changes: 0 additions & 19 deletions app/views/advanced/_facet_as_select.html.erb

This file was deleted.

37 changes: 0 additions & 37 deletions app/views/advanced/_guided_search_fields.html.erb

This file was deleted.

1 change: 0 additions & 1 deletion app/views/advanced/_location_code_facet.html.erb

This file was deleted.

62 changes: 0 additions & 62 deletions app/views/advanced/_numismatics_advanced_search_form.html.erb

This file was deleted.

Loading