Bug 23719: Allow searching specific fields for matching authorities in ES

To test:
1 - Export your authorities via Tools->Export data
2 - Define a record matching rule in Admin->Record matchign rules
    Use index: LC-card-number
    field: 010$a
3 - Stage the exported records for import and use the rule created above for matching
4 - The process does not complete
5 - Check intranet error logs - exception on unknown marclist
6 - Apply patch
7 - Repeat
8 - Success!
9 - prove -v t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Nick Clemens 2019-10-02 11:17:13 +00:00 committed by Martin Renvoize
parent 4c0786a110
commit 33595e1a3e
Signed by: martin.renvoize
GPG key ID: 422B469130441A0F
2 changed files with 18 additions and 10 deletions

View file

@ -469,16 +469,16 @@ sub build_authorities_query_compat {
$marclist = [map(lc, @{$marclist})];
$orderby = lc $orderby;
my @indexes;
# Make sure everything exists
foreach my $m (@$marclist) {
Koha::Exceptions::WrongParameter->throw("Invalid marclist field provided: $m")
unless exists $koha_to_index_name->{$m};
push @indexes, exists $koha_to_index_name->{$m} ? $koha_to_index_name->{$m} : $m;
}
for ( my $i = 0 ; $i < @$value ; $i++ ) {
next unless $value->[$i]; #clean empty form values, ES doesn't like undefined searches
push @searches,
{
where => $koha_to_index_name->{$marclist->[$i]},
where => $indexes[$i],
operator => $operator->[$i],
value => $value->[$i],
};

View file

@ -91,7 +91,8 @@ my $clear_search_fields_cache = sub {
};
subtest 'build_authorities_query_compat() tests' => sub {
plan tests => 55;
plan tests => 56;
my $qb;
@ -184,12 +185,19 @@ subtest 'build_authorities_query_compat() tests' => sub {
"authorities type code is used as filter"
);
# Failing case
throws_ok {
$qb->build_authorities_query_compat( [ 'tomas' ], undef, undef, ['contains'], [$search_term], 'AUTH_TYPE', 'asc' );
}
'Koha::Exceptions::WrongParameter',
'Exception thrown on invalid value in the marclist param';
# Authorities marclist check
$query = $qb->build_authorities_query_compat( [ 'tomas','mainentry' ], undef, undef, ['contains'], [$search_term,$search_term], 'AUTH_TYPE', 'asc' );
is_deeply(
$query->{query}->{bool}->{must}[0]->{query_string}->{default_field},
'tomas',
"If no mapping for marclist the index is passed through as defined"
);
is_deeply(
$query->{query}->{bool}->{must}[1]->{query_string}{default_field},
'heading',
"If mapping found for marclist the index is passed through converted"
);
};
subtest 'build_query tests' => sub {