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 <david@davidnind.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Aleisha Amohia 2023-05-23 03:32:59 +00:00 committed by Tomas Cohen Arazi
parent b982ac91a7
commit 33856898fd
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
1 changed files with 11 additions and 1 deletions

View File

@ -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,