Bug 22295: Make Elasticsearch query builder group multi-term queries
Test plan: 1. Do an advanced search for Title = new AND Title = york 2. Verify that the results match an advanced search for: Title = new york 3. Verify that tests in t/db_dependent/Koha/SearchEngine/Elasticsearch still pass Signed-off-by: Michal Denar <black23@gmail.com> Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
parent
5b11c25fe7
commit
e90cb16d79
|
|
@ -787,6 +787,7 @@ sub _create_query_string {
|
|||
my $field = $_->{field} ? $_->{field} . ':' : '';
|
||||
|
||||
my $oand = $self->_modify_string_by_type(%$_);
|
||||
$oand = "($oand)" if $field && scalar(split(/\s+/, $oand)) > 1;
|
||||
"$otor($field$oand)";
|
||||
} @queries;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ subtest 'build_authorities_query_compat() tests' => sub {
|
|||
};
|
||||
|
||||
subtest 'build_query tests' => sub {
|
||||
plan tests => 26;
|
||||
plan tests => 30;
|
||||
|
||||
my $qb;
|
||||
|
||||
|
|
@ -224,6 +224,20 @@ subtest 'build_query tests' => sub {
|
|||
"query not altered if QueryAutoTruncate disabled"
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['donald duck'], ['title'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(title:(donald duck))',
|
||||
'multiple words in a query term are enclosed in parenthesis'
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( ['AND'], ['donald duck', 'disney'], ['title', 'author'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(title:(donald duck)) AND (author:disney)',
|
||||
'multiple query terms are enclosed in parenthesis while a single one is not'
|
||||
);
|
||||
|
||||
t::lib::Mocks::mock_preference( 'QueryAutoTruncate', '1' );
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['donald duck'] );
|
||||
|
|
@ -324,7 +338,21 @@ subtest 'build_query tests' => sub {
|
|||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(title:"donald duck")',
|
||||
"query of specific field is not truncated when surrouned by quotes"
|
||||
"query of specific field is not truncated when surrounded by quotes"
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['donald duck'], ['title'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(title:(donald* duck*))',
|
||||
'words of a multi-word term are properly truncated'
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( ['AND'], ['donald duck', 'disney'], ['title', 'author'] );
|
||||
is(
|
||||
$query->{query}{query_string}{query},
|
||||
'(title:(donald* duck*)) AND (author:disney*)',
|
||||
'words of a multi-word term and single-word term are properly truncated'
|
||||
);
|
||||
|
||||
( undef, $query ) = $qb->build_query_compat( undef, ['title:"donald duck"'], undef, undef, undef, undef, undef, { suppress => 1 } );
|
||||
|
|
|
|||
Loading…
Reference in New Issue