Bug 27784: Don't parse subdivision authorities as headings
authorNick Clemens <nick@bywatersolutions.com>
Fri, 26 Feb 2021 14:28:42 +0000 (14:28 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 3 Mar 2021 10:57:51 +0000 (11:57 +0100)
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 <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Koha/SearchEngine/Elasticsearch.pm

index 27b3380..7241f05 100644 (file)
@@ -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;
             }