X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FMatcher.pm;h=4e064be1437faa977237fedb63cf0514bc08bbf0;hb=326ccb57ce8c537630b117bc92bd49ca4947c52b;hp=c0634ec3a3ffacce6577e5e48967aaa84b9235d8;hpb=65be03846d064dd6d9e7159550a269a352054b65;p=koha_fer diff --git a/C4/Matcher.pm b/C4/Matcher.pm index c0634ec3a3..4e064be143 100644 --- a/C4/Matcher.pm +++ b/C4/Matcher.pm @@ -626,20 +626,31 @@ sub get_matches { my %matches = (); - foreach my $matchpoint (@{ $self->{'matchpoints'} }) { - my @source_keys = _get_match_keys($source_record, $matchpoint); + 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 ); next if scalar(@source_keys) == 0; + # build query my $query; my $error; my $searchresults; my $total_hits; - if ($self->{'record_type'} eq 'biblio') { - $query = join(" or ", map { "$matchpoint->{'index'}=$_" } @source_keys); -# FIXME only searching biblio index at the moment + 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); - } elsif ($self->{'record_type'} eq 'authority') { + ( $error, $searchresults, $total_hits ) = + C4::Search::SimpleSearch( $query, 0, $max_matches ); + } + elsif ( $self->{'record_type'} eq 'authority' ) { my $authresults; my @marclist; my @and_or; @@ -648,24 +659,27 @@ sub get_matches { my @value; foreach my $key (@source_keys) { push @marclist, $matchpoint->{'index'}; - push @and_or, 'or'; + push @and_or, 'or'; push @operator, 'exact'; - push @value, $key; + push @value, $key; } require C4::AuthoritiesMarc; - ($authresults, $total_hits) = C4::AuthoritiesMarc::SearchAuthorities( - \@marclist, \@and_or, \@excluding, \@operator, - \@value, 0, 20, undef, 'AuthidAsc', 1 - ); + ( $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'}; } }