Bug 10230: no need to use SimpleSearch for matching auths
authorJared Camins-Esakov <jcamins@cpbibliography.com>
Sat, 11 May 2013 14:40:09 +0000 (10:40 -0400)
committerJared Camins-Esakov <jcamins@cpbibliography.com>
Sun, 19 May 2013 12:40:13 +0000 (08:40 -0400)
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 <Katrin.Fischer.83@web.de>
Comments on third patch of this series.
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>

C4/Matcher.pm

index 6a7c4f2..4e064be 100644 (file)
@@ -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'};
             }
         }