From 33595e1a3edd881e6b5489894c4676293839ed19 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 2 Oct 2019 11:17:13 +0000 Subject: [PATCH] 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 Signed-off-by: Jonathan Druart Signed-off-by: Martin Renvoize --- .../Elasticsearch/QueryBuilder.pm | 6 ++--- .../SearchEngine/Elasticsearch/QueryBuilder.t | 22 +++++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index 2613cc3ecd..daf7e65688 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -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], }; diff --git a/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t b/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t index 08e823578a..ccde4d911b 100644 --- a/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t +++ b/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t @@ -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 { -- 2.39.5