Bug 22524: Fix publication date and year search with Elasticsearch
Also fixes the mappings.yaml to use correct field name (left over issue from bug 19575), so reset mappings and reindex before testing. Test plan: 1. Reset mappings and reindex biblios. 2. Check that tests in t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t pass. 3. Try that all of the following year range type work in publication date search and year limit in advanced search: yyyy yyyy-yyyy -yyyy yyyy- Signed-off-by: Liz Rea <wizzyrea@gmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> (cherry picked from commit2293e6597c) Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com> (cherry picked from commitd21a1fb964) Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
parent
05b8f0bfb6
commit
22585ec127
|
|
@ -622,7 +622,7 @@ sub _convert_index_fields {
|
|||
my ( $self, @indexes ) = @_;
|
||||
|
||||
my %index_type_convert =
|
||||
( __default => undef, phr => 'phrase', rtrn => 'right-truncate' );
|
||||
( __default => undef, phr => 'phrase', rtrn => 'right-truncate', 'st-year' => 'st-year' );
|
||||
|
||||
# Convert according to our table, drop anything that doesn't convert.
|
||||
# If a field starts with mc- we save it as it's used (and removed) later
|
||||
|
|
@ -729,6 +729,13 @@ sub _modify_string_by_type {
|
|||
|
||||
$str .= '*' if $type eq 'right-truncate';
|
||||
$str = '"' . $str . '"' if $type eq 'phrase';
|
||||
if ($type eq 'st-year') {
|
||||
if ($str =~ /^(.*)-(.*)$/) {
|
||||
my $from = $1 || '*';
|
||||
my $until = $2 || '*';
|
||||
$str = "[$from TO $until]";
|
||||
}
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
|
|
@ -801,7 +808,7 @@ sub _create_query_string {
|
|||
my $field = $_->{field} ? $_->{field} . ':' : '';
|
||||
|
||||
my $oand = $self->_modify_string_by_type(%$_);
|
||||
$oand = "($oand)" if $field && scalar(split(/\s+/, $oand)) > 1;
|
||||
$oand = "($oand)" if $field && scalar(split(/\s+/, $oand)) > 1 && (!defined $_->{type} || $_->{type} ne 'st-year');
|
||||
"$otor($field$oand)";
|
||||
} @queries;
|
||||
}
|
||||
|
|
@ -869,6 +876,7 @@ sub _fix_limit_special_cases {
|
|||
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";
|
||||
}
|
||||
elsif ( $l =~ /^available$/ ) {
|
||||
|
|
|
|||
|
|
@ -3160,8 +3160,8 @@ biblios:
|
|||
sort: ~
|
||||
suggestible: ''
|
||||
type: ''
|
||||
pubdate:
|
||||
label: pubdate
|
||||
date-of-publication:
|
||||
label: date-of-publication
|
||||
mappings:
|
||||
- facet: ''
|
||||
marc_field: 008_/7-10
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ subtest 'build_authorities_query_compat() tests' => sub {
|
|||
};
|
||||
|
||||
subtest 'build_query tests' => sub {
|
||||
plan tests => 33;
|
||||
plan tests => 38;
|
||||
|
||||
my $qb;
|
||||
|
||||
|
|
@ -243,6 +243,42 @@ subtest 'build_query tests' => sub {
|
|||
is($query_cgi, 'idx=ti&q=%22donald%20duck%22&idx=au&q=walt%20disney', 'query cgi ok for multiterm query');
|
||||
is($query_desc, '(title:("donald duck")) (author:(walt disney))', 'query desc ok for multiterm query');
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['2019'], ['yr,st-year'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(date-of-publication:2019)',
|
||||
'Year in an st-year search is handled properly'
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['2018-2019'], ['yr,st-year'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(date-of-publication:[2018 TO 2019])',
|
||||
'Year range in an st-year search is handled properly'
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['-2019'], ['yr,st-year'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(date-of-publication:[* TO 2019])',
|
||||
'Open start year in year range of an st-year search is handled properly'
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['2019-'], ['yr,st-year'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(date-of-publication:[2019 TO *])',
|
||||
'Open end year in year range of an st-year search is handled properly'
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['2019-'], ['yr,st-year'], ['yr,st-numeric=-2019'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(date-of-publication:[2019 TO *]) AND copydate:[* TO 2019]',
|
||||
'Open end year in year range of an st-year search is handled properly'
|
||||
);
|
||||
|
||||
# Enable auto-truncation
|
||||
t::lib::Mocks::mock_preference( 'QueryAutoTruncate', '1' );
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['donald duck'] );
|
||||
|
|
|
|||
Loading…
Reference in New Issue