From 7872fbbedd3afa1327564e883a1c8af22e927f0e Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 26 Feb 2021 14:28:42 +0000 Subject: [PATCH] Bug 27784: Don't parse subdivision authorities as headings Subdivision authorities are not used for linking, however, they are recognized by C4::AuthoritiesMarc While these records are not used for linking, they could provide reference and should be allowed to exist in the catalog without breaking ES indexing THis patch simply skips the step of parsing the authorities into the linking form if the type contains '_SUBD' To test: 1 - Import a subdivision authority record via Z39 or use the one attached to this bug 2 - perl misc/search_tools/rebuild_elasticsearch.pl -v -d 3 - Authority indexing dies: Use of uninitialized value $tag in hash element at /usr/share/perl5/MARC/Record.pm line 202. Use of uninitialized value $tag in regexp compilation at /usr/share/perl5/MARC/Record.pm line 206. Use of uninitialized value $tag in hash element at /usr/share/perl5/MARC/Record.pm line 207. Can't call method "tag" on an undefined value at /kohadevbox/koha/C4/Heading.pm line 71. 4 - Apply patches 5 - reindex 6 - Success! Signed-off-by: David Nind --- Koha/SearchEngine/Elasticsearch.pm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Koha/SearchEngine/Elasticsearch.pm b/Koha/SearchEngine/Elasticsearch.pm index 27b33806c9..7241f052c8 100644 --- a/Koha/SearchEngine/Elasticsearch.pm +++ b/Koha/SearchEngine/Elasticsearch.pm @@ -556,9 +556,11 @@ sub marc_records_to_documents { if ( $self->index eq 'authorities' ){ my $authtypecode = GuessAuthTypeCode( $record ); if( $authtypecode ){ - my $field = $record->field( $auth_match_headings{ $authtypecode } ); - my $heading = C4::Heading->new_from_field( $field, undef, 1 ); #new auth heading - push @{$record_document->{'match-heading'}}, $heading->search_form if $heading; + if( $authtypecode !~ m/_SUBD/ ){ #Subdivision records will not be used for linking and so don't require match-heading to be built + my $field = $record->field( $auth_match_headings{ $authtypecode } ); + my $heading = C4::Heading->new_from_field( $field, undef, 1 ); #new auth heading + push @{$record_document->{'match-heading'}}, $heading->search_form if $heading; + } } else { warn "Cannot determine authority type for record: " . $record->field('001')->as_string; } -- 2.11.0