From 34e16a4157740bf53eeb02ab94070eadb2baf02f 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! --- 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 4a2d75d03d..cb476a4bf0 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