From 006e45aeaf9fb1d0c93704c5f9d9ac251f8ff824 Mon Sep 17 00:00:00 2001 From: Jared Camins-Esakov Date: Sat, 11 May 2013 10:40:09 -0400 Subject: [PATCH] Bug 10230: no need to use SimpleSearch for matching auths When introducing QueryParser, I introduced a check for QueryParser at too high a level, causing authority matching to try and use SimpleSearch for authorities prematurely, when SearchAuthorities should be handling it. This patch corrects the level of the check. This patch only moves three lines, but thanks to the change in if level, it adjusts the indentation quite a bit. Signed-off-by: Katrin Fischer Comments on third patch of this series. Signed-off-by: Jared Camins-Esakov (cherry picked from commit 2708db52778944f41b36379cc5f202a8ddea6a5a) Signed-off-by: Jared Camins-Esakov --- C4/Matcher.pm | 75 ++++++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/C4/Matcher.pm b/C4/Matcher.pm index 6a7c4f2226..4e064be143 100644 --- a/C4/Matcher.pm +++ b/C4/Matcher.pm @@ -628,51 +628,58 @@ sub get_matches { my $QParser; $QParser = C4::Context->queryparser if (C4::Context->preference('UseQueryParser')); - foreach my $matchpoint (@{ $self->{'matchpoints'} }) { - my @source_keys = _get_match_keys($source_record, $matchpoint); + foreach my $matchpoint ( @{ $self->{'matchpoints'} } ) { + my @source_keys = _get_match_keys( $source_record, $matchpoint ); next if scalar(@source_keys) == 0; + # build query my $query; my $error; my $searchresults; my $total_hits; - if ($QParser) { - $query = join(" || ", map { "$matchpoint->{'index'}:$_" } @source_keys); + if ( $self->{'record_type'} eq 'biblio' ) { + if ($QParser) { + $query = join( " || ", + map { "$matchpoint->{'index'}:$_" } @source_keys ); + } + else { + $query = join( " or ", + map { "$matchpoint->{'index'}=$_" } @source_keys ); + } require C4::Search; - ($error, $searchresults, $total_hits) = C4::Search::SimpleSearch($query, 0, $max_matches, [ $self->{'record_type'} . 'server' ] ); - } else { - if ($self->{'record_type'} eq 'biblio') { - $query = join(" or ", map { "$matchpoint->{'index'}=$_" } @source_keys); - require C4::Search; - ($error, $searchresults, $total_hits) = C4::Search::SimpleSearch($query, 0, $max_matches); - } elsif ($self->{'record_type'} eq 'authority') { - my $authresults; - my @marclist; - my @and_or; - my @excluding = []; - my @operator; - my @value; - foreach my $key (@source_keys) { - push @marclist, $matchpoint->{'index'}; - push @and_or, 'or'; - push @operator, 'exact'; - push @value, $key; - } - require C4::AuthoritiesMarc; - ($authresults, $total_hits) = C4::AuthoritiesMarc::SearchAuthorities( - \@marclist, \@and_or, \@excluding, \@operator, - \@value, 0, 20, undef, 'AuthidAsc', 1 - ); - foreach my $result (@$authresults) { - push @$searchresults, $result->{'authid'}; - } + ( $error, $searchresults, $total_hits ) = + C4::Search::SimpleSearch( $query, 0, $max_matches ); + } + elsif ( $self->{'record_type'} eq 'authority' ) { + my $authresults; + my @marclist; + my @and_or; + my @excluding = []; + my @operator; + my @value; + foreach my $key (@source_keys) { + push @marclist, $matchpoint->{'index'}; + push @and_or, 'or'; + push @operator, 'exact'; + push @value, $key; + } + require C4::AuthoritiesMarc; + ( $authresults, $total_hits ) = + C4::AuthoritiesMarc::SearchAuthorities( + \@marclist, \@and_or, \@excluding, \@operator, + \@value, 0, 20, undef, + 'AuthidAsc', 1 + ); + foreach my $result (@$authresults) { + push @$searchresults, $result->{'authid'}; } } - if (defined $error ) { + if ( defined $error ) { warn "search failed ($query) $error"; - } else { - foreach my $matched (@{$searchresults}) { + } + else { + foreach my $matched ( @{$searchresults} ) { $matches{$matched} += $matchpoint->{'score'}; } } -- 2.39.5