-
Notifications
You must be signed in to change notification settings - Fork 0
Add support for query tokenization parameters #435
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,6 +7,7 @@ class QueryBuilder | |
| GEO_PARAMS = %w[geoboxMinLongitude geoboxMinLatitude geoboxMaxLongitude geoboxMaxLatitude geodistanceLatitude | ||
| geodistanceLongitude geodistanceDistance].freeze | ||
| VALID_QUERY_MODES = %w[keyword semantic hybrid].freeze | ||
| TOKENIZATION_PARAMS = %w[semanticDropBoostThreshold semanticMustBoostThreshold semanticShortQueryMaxTokens].freeze | ||
|
|
||
| def initialize(enhanced_query) | ||
| @query = {} | ||
|
|
@@ -22,6 +23,7 @@ def initialize(enhanced_query) | |
| extract_geosearch(enhanced_query) | ||
| extract_filters(enhanced_query) | ||
| evaluate_query_mode(enhanced_query) | ||
| extract_tokenization_params(enhanced_query) | ||
| @query['index'] = ENV.fetch('TIMDEX_INDEX', nil) | ||
| @query['booleanType'] = enhanced_query[:booleanType] | ||
| @query.compact! | ||
|
|
@@ -59,9 +61,20 @@ def extract_filters(enhanced_query) | |
| end | ||
| end | ||
|
|
||
| # The GraphQL API requires that lat/long in geospatial fields be floats | ||
| def coerce_to_float?(geo_param) | ||
| geo_param.to_s.include?('Longitude') || geo_param.to_s.include?('Latitude') | ||
| # We treat the tokenization parameters separately because we need to ensure that floats and integers are formatted | ||
| # correctly. | ||
| def extract_tokenization_params(enhanced_query) | ||
| TOKENIZATION_PARAMS.each do |tp| | ||
| next unless enhanced_query[tp.to_sym].present? | ||
|
|
||
| @query[tp] = coerce_to_float?(tp) ? enhanced_query[tp.to_sym]&.strip.to_f : enhanced_query[tp.to_sym]&.strip.to_i | ||
| end | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| end | ||
|
|
||
| # The GraphQL API requires that some parameters - lat/long in geospatial fields and boost thresholds for tuning - be | ||
| # floats. | ||
| def coerce_to_float?(param) | ||
| param.to_s.include?('Longitude') || param.to_s.include?('Latitude') || param.to_s.include?('BoostThreshold') | ||
| end | ||
|
|
||
| # Determine the query mode from URL parameter or config, with fallback to 'keyword' | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1183,6 +1183,26 @@ def source_filter_count(controller) | |
| assert_select '.pagination-container .current', text: /21 - 40 of 800/ | ||
| end | ||
|
|
||
| # test 'results can include tuning parameters' do | ||
| # query = 'optical networks in space' | ||
| # must_default = 0.7 | ||
| # drop_default = 0.1 | ||
| # must_alt = 0.9 | ||
| # drop_alt = 0.4 | ||
|
|
||
| # VCR.use_cassette('default tuning for stock query') do | ||
| # get "/results?q=#{query}&semanticMustBoostThreshold=#{must_default}&semanticDropBoostThreshold=#{drop_default}&tab=timdex" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| # assert_response :success | ||
| # end | ||
|
|
||
| # VCR.use_cassette('alternate tuning for stock query') do | ||
| # get "/results?q=#{query}&semanticMustBoostThreshold=#{must_alt}&semanticDropBoostThreshold=#{drop_alt}&tab=timdex" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| # assert_response :success | ||
| # end | ||
|
|
||
| # # Assert result counts are different | ||
| # end | ||
|
|
||
| test 'results can be returned in JSON format when env is set and valid token is provided' do | ||
| secret_value = 'sooper_sekret' | ||
| quepid_ua = 'Quepid/1.0 (Web Scraper)' | ||
|
|
||
Large diffs are not rendered by default.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Found 2 issues:
1. Assignment Branch Condition size for
initializeis too high. [<7, 20, 5> 21.77/17] [rubocop:Metrics/AbcSize]2. Method has too many lines. [15/10] [rubocop:Metrics/MethodLength]