Skip to content

Commit

Permalink
Merge branch 'main' into i3412_built_in_advanced_search_form
Browse files Browse the repository at this point in the history
  • Loading branch information
maxkadel committed Aug 24, 2023
2 parents 6457e0b + f222853 commit d44ceba
Show file tree
Hide file tree
Showing 19 changed files with 379 additions and 187 deletions.
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,7 @@ GEM
sprockets-rails
tilt
scrub_rb (1.0.1)
selenium-webdriver (4.10.0)
selenium-webdriver (4.11.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/requests/request_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def redirect_single_aeon_thesis_numistatics
### redirect to Aeon for thesis or coin items or single Aeon requestable
### or over 500 Aeon requestable
if @request.thesis? || @request.numismatics?
redirect_to "#{Requests::Config[:aeon_base]}?#{@request.requestable.first.aeon_mapped_params.to_query}"
redirect_to "#{aeon_base}?#{@request.requestable.first.aeon_mapped_params.to_query}"
elsif @request.single_aeon_requestable?
redirect_to @request.first_filtered_requestable.aeon_request_url
end
Expand Down
4 changes: 4 additions & 0 deletions app/helpers/requests/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,10 @@ def single_pickup(is_charged, name, id, location)
label = label_tag id, "Pick-up location: #{location[:label]}", class: 'single-pick-up', style: style.to_s
hidden + label
end

def aeon_base
Flipflop.deprecated_aeon_base? ? Requests::Config[:aeon_base_deprecated] : Requests::Config[:aeon_base]
end
end
end
# rubocop:enable Metrics/ModuleLength
4 changes: 3 additions & 1 deletion app/models/requests/aeon_url.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ def initialize(document:, holding: nil, item: nil)
end

def to_s
@compiled_string ||= "#{Requests::Config[:aeon_base]}/OpenURL?#{query_string}"
aeon_url = Flipflop.deprecated_aeon_base? ? Requests::Config[:aeon_base_deprecated] : Requests::Config[:aeon_base]
aeon_connector = Flipflop.deprecated_aeon_base? ? "/OpenURL?" : "?Action=10&Form=30&"
@compiled_string ||= "#{aeon_url}#{aeon_connector}#{query_string}"
end

private
Expand Down
3 changes: 2 additions & 1 deletion app/models/requests/requestable_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@ def aeon_url(_request_ctx)
if requestable.alma_managed?
requestable.aeon_request_url
else
"#{Requests::Config[:aeon_base]}?#{requestable.aeon_mapped_params.to_query}"
aeon_url = Flipflop.deprecated_aeon_base? ? Requests::Config[:aeon_base_deprecated] : Requests::Config[:aeon_base]
"#{aeon_url}?#{requestable.aeon_mapped_params.to_query}"
end
end

Expand Down
2 changes: 1 addition & 1 deletion config/alma.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ test:
<<: *default
read_write_apikey: 'TESTME'

alma_qa:
qa:
<<: *default

staging:
Expand Down
3 changes: 0 additions & 3 deletions config/blacklight.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@ test: &test
staging:
adapter: solr
url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/blacklight-core" %>
alma_qa:
adapter: solr
url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/blacklight-core" %>
qa:
adapter: solr
url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/blacklight-core" %>
Expand Down
2 changes: 0 additions & 2 deletions config/database.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,5 @@ production:

staging:
<<: *default
alma_qa:
<<: *default
qa:
<<: *default
2 changes: 1 addition & 1 deletion config/deploy/qa.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

set :rvm_ruby_string, :local # use the same ruby as used locally for deployment
set :rails_env, 'alma_qa'
set :rails_env, 'qa'
set :branch, ENV['BRANCH'] || 'main'

server 'catalog-qa1.princeton.edu', user: 'deploy', roles: %i[web app db worker mailcatcher cron_db]
Expand Down
4 changes: 4 additions & 0 deletions config/features.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@
default: false,
description: "When on / true, displays the message set by the announcement rake task."

feature :deprecated_aeon_base,
default: true,
description: "When on / true use the old Aeon base URL instead of the new ones. Uses the Atlas-hosted url in staging and QA."

group :blacklight_8 do
feature :json_query_dsl,
description: "When on / true, use the JSON query DSL for search fields in the advanced search. When off / false, use query params"
Expand Down
9 changes: 0 additions & 9 deletions config/orangelight.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,6 @@ staging:
exchange: 'orangelight_events'
firestone_locator_base_url: https://locator-staging.princeton.edu

alma_qa:
<<: *defaults
redis:
host: <%= ENV['OL_REDIS_HOST'] %>
port: <%= ENV['OL_REDIS_PORT'] || '6379' %>
db: 'orangelight_qa'
events:
server: <%= ENV['OL_RABBIT_SERVER'] || 'amqp://localhost:5672' %>
exchange: 'orangelight_events'
qa:
<<: *defaults
redis:
Expand Down
4 changes: 0 additions & 4 deletions config/redis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ staging:
<<: *defaults
host: <%= ENV['OL_REDIS_HOST'] %>
port: <%= ENV['OL_REDIS_PORT'] || '6379' %>
alma_qa:
<<: *defaults
host: <%= ENV['OL_REDIS_HOST'] %>
port: <%= ENV['OL_REDIS_PORT'] || '6379' %>
qa:
<<: *defaults
host: <%= ENV['OL_REDIS_HOST'] %>
Expand Down
5 changes: 4 additions & 1 deletion config/requests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ defaults: &defaults
bibdata_base: <%= ENV['BIBDATA_BASE'] || "https://bibdata.princeton.edu" %>
proxy_base: https://login.ezproxy.princeton.edu/login?url=
pulsearch_base: https://catalog.princeton.edu
aeon_base: https://lib-aeon.princeton.edu/aeon/aeon.dll
aeon_base_deprecated: https://lib-aeon.princeton.edu/aeon/aeon.dll
aeon_base: https://lib-aeon.princeton.edu/logon
gfa_base: http://libweb5.princeton.edu/ReCAPNoUI/Default.aspx
ill_base: https://lib-illiad.princeton.edu/illiad/illiad.dll/OpenURL
scsb_base: https://scsb.recaplib.org:9093
Expand All @@ -28,10 +29,12 @@ production:
<<: *defaults
staging:
<<: *defaults
aeon_base: https://princeton.aeon.atlas-sys.com/logon
pulsearch_base: https://catalog-staging.princeton.edu
bibdata_base: <%= ENV['BIBDATA_BASE'] || "https://bibdata-staging.princeton.edu" %>
qa:
<<: *defaults
aeon_base: https://princeton.aeon.atlas-sys.com/logon
bibdata_base: <%= ENV['BIBDATA_BASE'] || "https://bibdata-qa.princeton.edu" %>
# scsb_base: https://uat-recap.htcinc.com:9093
scsb_base: https://scsb.recaplib.org:9093
Expand Down
2 changes: 0 additions & 2 deletions config/secrets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,5 @@ production:

staging:
secret_key_base: <%= ENV['OL_SECRET_KEY_BASE'] %>
alma_qa:
secret_key_base: <%= ENV['OL_SECRET_KEY_BASE'] %>
qa:
secret_key_base: <%= ENV['OL_SECRET_KEY_BASE'] %>
158 changes: 21 additions & 137 deletions solr/conf/schema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -190,11 +190,29 @@
</fieldType>

<fieldType name="text_lr" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<analyzer type="index">
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="^(.*)$" replacement="AAAA $1 ZZZZ" />
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.FlattenGraphFilterFactory"/>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="" replacement="" />
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([\p{InHangul_Jamo}\p{InHangul_Compatibility_Jamo}\p{InHangul_Syllables}][\p{InBopomofo}\p{InBopomofo_Extended}\p{InCJK_Compatibility}\p{InCJK_Compatibility_Forms}\p{InCJK_Compatibility_Ideographs}\p{InCJK_Compatibility_Ideographs_Supplement}\p{InCJK_Radicals_Supplement}\p{InCJK_Symbols_And_Punctuation}\p{InCJK_Unified_Ideographs}\p{InCJK_Unified_Ideographs_Extension_A}\p{InCJK_Unified_Ideographs_Extension_B}\p{InKangxi_Radicals}\p{InHalfwidth_And_Fullwidth_Forms}\p{InIdeographic_Description_Characters}]*)\s+(?=[\p{InHangul_Jamo}\p{InHangul_Compatibility_Jamo}\p{InHangul_Syllables}\p{InBopomofo}\p{InBopomofo_Extended}\p{InCJK_Compatibility}\p{InCJK_Compatibility_Forms}\p{InCJK_Compatibility_Ideographs}\p{InCJK_Compatibility_Ideographs_Supplement}\p{InCJK_Radicals_Supplement}\p{InCJK_Symbols_And_Punctuation}\p{InCJK_Unified_Ideographs}\p{InCJK_Unified_Ideographs_Extension_A}\p{InCJK_Unified_Ideographs_Extension_B}\p{InKangxi_Radicals}\p{InHalfwidth_And_Fullwidth_Forms}\p{InIdeographic_Description_Characters}])" replacement="$1"/>
<!-- a korean char guaranteed at the end of the pattern: pattern="([\p{Hangul}\p{Han}])\s+(?=[\p{Han}\s]*\p{Hangul})" -->
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([\p{InHangul_Jamo}\p{InHangul_Compatibility_Jamo}\p{InHangul_Syllables}\p{InBopomofo}\p{InBopomofo_Extended}\p{InCJK_Compatibility}\p{InCJK_Compatibility_Forms}\p{InCJK_Compatibility_Ideographs}\p{InCJK_Compatibility_Ideographs_Supplement}\p{InCJK_Radicals_Supplement}\p{InCJK_Symbols_And_Punctuation}\p{InCJK_Unified_Ideographs}\p{InCJK_Unified_Ideographs_Extension_A}\p{InCJK_Unified_Ideographs_Extension_B}\p{InKangxi_Radicals}\p{InHalfwidth_And_Fullwidth_Forms}\p{InIdeographic_Description_Characters}])\s+(?=[\p{InBopomofo}\p{InBopomofo_Extended}\p{InCJK_Compatibility}\p{InCJK_Compatibility_Forms}\p{InCJK_Compatibility_Ideographs}\p{InCJK_Compatibility_Ideographs_Supplement}\p{InCJK_Radicals_Supplement}\p{InCJK_Symbols_And_Punctuation}\p{InCJK_Unified_Ideographs}\p{InCJK_Unified_Ideographs_Extension_A}\p{InCJK_Unified_Ideographs_Extension_B}\p{InKangxi_Radicals}\p{InHalfwidth_And_Fullwidth_Forms}\p{InIdeographic_Description_Characters}\s]*[\p{InHangul_Jamo}\p{InHangul_Compatibility_Jamo}\p{InHangul_Syllables}])" replacement="$1"/>
<filter class="solr.CJKWidthFilterFactory"/>
<filter class="edu.stanford.lucene.analysis.CJKFoldingFilterFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Traditional-Simplified"/>
<filter class="solr.ICUTransformFilterFactory" id="Katakana-Hiragana"/>
<filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
<filter class="solr.PatternReplaceFilterFactory" pattern="(\p{Punct})" replacement="" replace="all" />
<filter class="solr.TrimFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="^(.*)$" replacement="AAAA $1 ZZZZ" />
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="" replacement="" />
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([\p{InHangul_Jamo}\p{InHangul_Compatibility_Jamo}\p{InHangul_Syllables}][\p{InBopomofo}\p{InBopomofo_Extended}\p{InCJK_Compatibility}\p{InCJK_Compatibility_Forms}\p{InCJK_Compatibility_Ideographs}\p{InCJK_Compatibility_Ideographs_Supplement}\p{InCJK_Radicals_Supplement}\p{InCJK_Symbols_And_Punctuation}\p{InCJK_Unified_Ideographs}\p{InCJK_Unified_Ideographs_Extension_A}\p{InCJK_Unified_Ideographs_Extension_B}\p{InKangxi_Radicals}\p{InHalfwidth_And_Fullwidth_Forms}\p{InIdeographic_Description_Characters}]*)\s+(?=[\p{InHangul_Jamo}\p{InHangul_Compatibility_Jamo}\p{InHangul_Syllables}\p{InBopomofo}\p{InBopomofo_Extended}\p{InCJK_Compatibility}\p{InCJK_Compatibility_Forms}\p{InCJK_Compatibility_Ideographs}\p{InCJK_Compatibility_Ideographs_Supplement}\p{InCJK_Radicals_Supplement}\p{InCJK_Symbols_And_Punctuation}\p{InCJK_Unified_Ideographs}\p{InCJK_Unified_Ideographs_Extension_A}\p{InCJK_Unified_Ideographs_Extension_B}\p{InKangxi_Radicals}\p{InHalfwidth_And_Fullwidth_Forms}\p{InIdeographic_Description_Characters}])" replacement="$1"/>
<!-- a korean char guaranteed at the end of the pattern: pattern="([\p{Hangul}\p{Han}])\s+(?=[\p{Han}\s]*\p{Hangul})" -->
Expand Down Expand Up @@ -255,139 +273,12 @@
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

<!-- A text field with defaults appropriate for English: it
tokenizes with StandardTokenizer, removes English stop words
(stopwords_en.txt), down cases, protects words from protwords.txt, and
finally applies Porter's stemming. The query time analyzer
also applies synonyms from synonyms.txt. -->
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>

<!-- A text field with defaults appropriate for English, plus
aggressive word-splitting and autophrase features enabled.
This field is just like text_en, except it adds
WordDelimiterFilter to enable splitting and matching of
words on case-change, alpha numeric boundaries, and
non-alphanumeric chars. This means certain compound word
cases will work, for example query "wi fi" will match
document "WiFi" or "wi-fi". However, other cases will still
not match, for example if the query is "wifi" and the
document is "wi fi" or if the query is "wi-fi" and the
document is "wifi".
-->
<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>

<!-- Less flexible matching, but less false matches. Probably not ideal for product names,
but may be good for SKUs. Can insert dashes in the wrong place and still match. -->
<fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
possible with WordDelimiterFilter in conjuncton with stemming. -->
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>

<!-- Just like text_general except it reverses the characters of
each token, to enable more efficient leading wildcard queries. -->
<fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Expand Down Expand Up @@ -577,12 +468,6 @@

<!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

<!--
A Geohash is a compact representation of a latitude longitude pair in a single field.
See http://wiki.apache.org/solr/SpatialSearch
-->
<fieldtype name="geohash" class="solr.GeoHashField"/>
</types>


Expand Down Expand Up @@ -750,7 +635,6 @@
<copyField source="linked_series_index" dest="title_addl_la"/>
<copyField source="series_ae_index" dest="title_addl_la"/>
<copyField source="original_version_series_index" dest="title_addl_la"/>
<copyField source="title_addl_la" dest="title_addl_lr"/>

<copyField source="more_in_this_series_t" dest="more_in_this_series_la"/>

Expand Down
Loading

0 comments on commit d44ceba

Please sign in to comment.