@@ -, +, @@ limits --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 10 ++++++++-- .../SearchEngine/Elasticsearch/QueryBuilder.t | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -305,10 +305,16 @@ sub build_query_compat { # would be to pass them separately into build_query and let it build # them into a structured ES query itself. Maybe later, though that'd be # more robust. - $search_param_query_str = join( ' ', $self->_create_query_string(@search_params) ); + my @search_param_query_array = $self->_create_query_string(@search_params); + $search_param_query_str = join( ' ', @search_param_query_array ); + my $search_param_limit_str = + $self->_join_queries( $self->_convert_index_strings(@$limits) ); + if ( @search_param_query_array > 1 && $search_param_limit_str ) { + $search_param_query_str = "($search_param_query_str)"; + } $query_str = join( ' AND ', $search_param_query_str || (), - $self->_join_queries( $self->_convert_index_strings(@$limits) ) || () ); + $search_param_limit_str || () ); # If there's no query on the left, let's remove the junk left behind $query_str =~ s/^ AND //; --- a/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t +++ a/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t @@ -217,7 +217,7 @@ subtest 'build_authorities_query_compat() tests' => sub { }; subtest 'build_query tests' => sub { - plan tests => 57; + plan tests => 59; my $qb; @@ -496,6 +496,20 @@ subtest 'build_query tests' => sub { "Limits quoted correctly when passed as phrase" ); + ( undef, $query ) = $qb->build_query_compat( ['OR'], ['title:"donald duck"', 'author:"Dillinger Escaplan"'], undef, ['itype:BOOK'] ); + is( + $query->{query}{query_string}{query}, + '((title:"donald duck") OR (author:"Dillinger Escaplan")) AND itype:("BOOK")', + "OR query with limit" + ); + + ( undef, $query ) = $qb->build_query_compat( undef, undef, undef, ['itype:BOOK'] ); + is( + $query->{query}{query_string}{query}, + 'itype:("BOOK")', + "Limit only" + ); + # Scan queries ( undef, $query, $simple_query, $query_cgi, $query_desc ) = $qb->build_query_compat( undef, ['new'], ['au'], undef, undef, 1 ); is( --