return $self->custom_data->{default_preferred_language_multiplier};
}
+sub max_popularity_importance_multiplier {
+ my $self = shift;
+ my $max = shift;
+
+ $self->custom_data->{max_popularity_importance_multiplier} = $max if defined($max);
+ return $self->custom_data->{max_popularity_importance_multiplier};
+}
+
sub simple_plan {
my $self = shift;
} elsif ($sort_filter eq 'edit_date') {
$rank = "FIRST((SELECT edit_date FROM biblio.record_entry rbr WHERE rbr.id = m.source))";
} elsif ($sort_filter eq 'poprel') {
- $rank = '1.0/((' . $rel . ') * (1.0 + AVG(COALESCE(pop_with.total_score::NUMERIC,0.0)) / 5.0))::NUMERIC';
+ my $max_mult = $self->QueryParser->max_popularity_importance_multiplier() // 2.0;
+ $rank = '1.0/((' . $rel . ') * (' . $max_mult .' - 1.0) * (1.0 + AVG(COALESCE(pop_with.total_score::NUMERIC,0.0)) / 5.0))::NUMERIC';
} elsif ($sort_filter =~ /^pop/) {
$rank = '1.0/(AVG(COALESCE(pop_with.total_score::NUMERIC,0.0)) + 5.0)::NUMERIC';
my $pop_desc = $desc eq 'ASC' ? 'DESC' : 'ASC';
use OpenILS::Application::Storage::FTS;
use OpenILS::Utils::Fieldmapper;
use OpenSRF::Utils::Logger qw/:level/;
+use OpenILS::Application::AppUtils;
use OpenSRF::Utils::Cache;
use OpenSRF::Utils::JSON;
use Data::Dumper;
use OpenILS::Application::Storage::QueryParser;
+my $U = 'OpenILS::Application::AppUtils';
+
my $log = 'OpenSRF::Utils::Logger';
$VERSION = 1;
)->gather(1),
);
+ my $max_mult;
+ my $cgf = $cstore->request(
+ 'open-ils.cstore.direct.config.global_flag.retrieve',
+ 'search.max_popularity_importance_multiplier'
+ )->gather(1);
+ $max_mult = $cgf->value if $cgf && $U->is_true($cgf->enabled);
+ $max_mult //= 2.0;
+ $max_mult = 2.0 unless $max_mult =~ /^-?(?:\d+\.?|\.\d)\d*\z/; # just in case
+ $parser->max_popularity_importance_multiplier($max_mult);
+
$cstore->disconnect;
die("Cannot initialize $parser!") unless ($parser->initialization_complete);
}
'',
TRUE
);
+
+INSERT INTO config.global_flag (name, label, value, enabled) VALUES (
+ 'search.max_popularity_importance_multiplier',
+ oils_i18n_gettext(
+ 'search.max_popularity_importance_multiplier',
+ 'Maximum popularity importance multiplier for popularity-adjusted relevance searches (decimal value between 1.0 and 2.0)',
+ 'cgf',
+ 'label'
+ ),
+ '2.0',
+ TRUE
+);
*/
INSERT INTO config.usr_setting_type (name,opac_visible,label,description,datatype)
TRUE
);
+INSERT INTO config.global_flag (name, label, value, enabled) VALUES (
+ 'search.max_popularity_importance_multiplier',
+ oils_i18n_gettext(
+ 'search.max_popularity_importance_multiplier',
+ 'Maximum popularity importance multiplier for popularity-adjusted relevance searches (decimal value between 1.0 and 2.0)',
+ 'cgf',
+ 'label'
+ ),
+ '2.0',
+ TRUE
+);
+
CREATE TABLE rating.popularity_parameter (
id INT PRIMARY KEY,
name TEXT NOT NULL UNIQUE, -- i18n