From 03842724670c80edd54932768ee2668ea8aea2c1 Mon Sep 17 00:00:00 2001 From: Fridolin Somers Date: Fri, 22 Jan 2021 09:39:33 +0100 Subject: [PATCH] Bug 22801: Advance search yr must use date-of-publication and not copydate In advanced search with Elasticsearch the limit on years range is actually using copydate : Koha/SearchEngine/Elasticsearch/QueryBuilder.pm in _fix_limit_special_cases() : if ( $l =~ /^yr,st-numeric,ge=/ ) { my ( $start, $end ) = ( $l =~ /^yr,st-numeric,ge=(.*) and yr,st-numeric,le=(.*)$/ ); next unless defined($start) && defined($end); push @new_lim, "copydate:[$start TO $end]"; } With Zebra it uses date-of-publication and also in Koha/SearchEngine/Elasticsearch/QueryBuilder.pm : our %index_field_convert = ( (...) 'yr' => 'date-of-publication', This patch uses %index_field_convert to perform 'yr' limit. Test plan: 1) Apply patch 2) Use Elasticsearch searchengine 3) Go to advanced search with 'More options' 4) Perform a search with a year limit (value or range) 5) Check results are correct Signed-off-by: David Nind --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index a39931ab0b..2294f82142 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -995,6 +995,9 @@ The argument should be an arrayref, and it'll return an arrayref. sub _fix_limit_special_cases { my ( $self, $limits ) = @_; + # yr is usually an alias of a search field + my $yrfield = ( exists $index_field_convert{'yr'} ) ? $index_field_convert{'yr'} : 'yr'; + my @new_lim; foreach my $l (@$limits) { @@ -1003,13 +1006,13 @@ sub _fix_limit_special_cases { my ( $start, $end ) = ( $l =~ /^yr,st-numeric,ge=(.*) and yr,st-numeric,le=(.*)$/ ); next unless defined($start) && defined($end); - push @new_lim, "copydate:[$start TO $end]"; + push @new_lim, "$yrfield:[$start TO $end]"; } elsif ( $l =~ /^yr,st-numeric=/ ) { my ($date) = ( $l =~ /^yr,st-numeric=(.*)$/ ); next unless defined($date); $date = $self->_modify_string_by_type(type => 'st-year', operand => $date); - push @new_lim, "copydate:$date"; + push @new_lim, "$yrfield:$date"; } elsif ( $l =~ /^available$/ ) { push @new_lim, 'onloan:false'; -- 2.20.1