From 33856898fd2f1cd757aeafe3c165300928f9da61 Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Tue, 23 May 2023 03:32:59 +0000 Subject: [PATCH] Bug 26611: Make authority record matching use required match checks This patch fixes record matching for authorities to correctly apply required match checks. To test: 1) Create a record matching rule: Threshold: 100 Record type: Authority record Match point 1 Search index: subject-topical Score: 100 Tag: 150 Subfields: a Match check 1 Both source and target record check fields: Tag: 040 Subfields: a This rule says we want to match on the topical term heading, then confirm the match with 040$a. 2) Create two topical term authority records Authority 1: 150$a: Test 040$a: A Authority 2: 150$a: Test 040$a: B 3) Export authority 2 and save 4) Go to Cataloging -> Stage records for import 5) Upload your downloaded authority 2 file. Change the record type to Authority. Choose your new record matching rule. 6) Stage for import. 7) Confirm that with the record matching rule applied, both authorities 1 and 2 show as possible matches, even though only authority 2 has a matching 040$a. 8) Apply the patch and restart services 9) Change the matching rule to "Do not look for matching records" and apply. This is to essentially refresh the page. 10) Change the matching rule to your new matching rule and apply. Confirm only the matching authority 2 shows and is selected. Sponsored-by: Waikato Institute of Technology Signed-off-by: David Nind Signed-off-by: Nick Clemens Signed-off-by: Tomas Cohen Arazi --- C4/Matcher.pm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/C4/Matcher.pm b/C4/Matcher.pm index 7322c14417..fbfcc1cb40 100644 --- a/C4/Matcher.pm +++ b/C4/Matcher.pm @@ -700,8 +700,9 @@ sub get_matches { foreach my $result (@$authresults) { my $id = $result->{authid}; + my $target_record = Koha::Authorities->find( $id )->record; $matches->{$id}->{score} += $matchpoint->{'score'}; - $matches->{$id}->{record} = $id; + $matches->{$id}->{record} = $target_record; } } } @@ -729,6 +730,15 @@ sub get_matches { } } elsif ($self->{'record_type'} eq 'authority') { require C4::AuthoritiesMarc; + # get rid of any that don't meet the required checks + $matches = { + map { + _passes_required_checks( $source_record, $matches->{$_}->{'record'}, $self->{'required_checks'} ) + ? ( $_ => $matches->{$_} ) + : () + } keys %$matches + }; + foreach my $id (keys %$matches) { push @results, { record_id => $id, -- 2.39.5