QueryParser was loading redundant search aliases, which in turn resulted
in certain queries involving two or more clauses joined by a Boolean
operator getting parsed in correctly.
To test:
[1] Enable QueryParser.
[2] Arrange your database so that some some bib records contain
the keyword 'history' while a smaller subset contain
both 'history' and 'earth'. (The exact words used don't
matter.)
[3] Run the following search from the OPAC global search bar:
kw:history && kw:earth
[4] Observe that the records that are returned include *all* bibs
in the database with the keyword 'history'. In other words, the
restriction that the records must also contain 'earth' is not
observed.
[5] Apply the patch and rerun the search.
[6] This time, the results that are returned should include only those
that contain both 'history' and 'earth'.
[7] Verify that prove -v t/QueryParser.t passes.
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes test plans, all tests and QA script.
Also checked the db_dependent/Search.t tests.
Tried some other searches, all seems to be working correctly.
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
I reproduce the bug and I confirm this patch fixes it.
Without the patch, kw:history && kw:earth, I got:
Search biblios OK 4 1 1+0 RPN @attrset Bib-1 @attr 4=6 @attr 1=1016 history
With the path, I get:
Search biblios OK 2 1 1+0 RPN @attrset Bib-1 @and @attr 4=6 @attr 1=1016 history @attr 4=6 @attr 1=1016 earth
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
my ($self, $class, $field, $server, $attributes) = @_;
$self->add_search_field( $class => $field );
- $self->add_search_field_alias( $class => $field => $field );
return $self->_add_field_mapping($self->bib1_field_map, $class, $field, $server, $attributes);
}
$self->add_bib1_field_map(
$class => $field => $server => $bib1_mapping );
}
- $self->add_search_field_alias( $class => $field =>
- $field_mappings->{$class}->{$field}->{'index'} );
foreach my $alias (
@{ $field_mappings->{$class}->{$field}->{'aliases'} } )
{
- next
- if ( $alias eq
- $field_mappings->{$class}->{$field}->{'index'} );
$self->add_search_field_alias( $class => $field => $alias );
}
}
'field_mappings' => {
'author' => {
'personal' => {
- 'aliases' => [
- 'personal'
- ],
+ 'aliases' => [ ],
'bib1_mapping' => {
'biblioserver' => {
'1' => '1004'
use C4::Debug;
require C4::Context;
-use Test::More tests => 198;
+use Test::More tests => 200;
use Test::MockModule;
use MARC::Record;
use File::Spec;