From 638832ca40d4f53abe7a4297b13446cf5e81741e Mon Sep 17 00:00:00 2001 From: Janusz Kaczmarek Date: Tue, 28 Feb 2023 19:18:05 +0100 Subject: [PATCH] Bug 33093 - (Bug 27546 follow-up) With ES searching within results does not work for 'Keyword' and 'Keyword as phrase' The feature of searching within search results in librarian interface has some problems with with elastic: 'Keyword' and 'Keyword as phrase' searches give no results. This is because elastic is unaware of the search field 'kw' and 'kw' is not transformed nor removed for limits. Test plan ========= 1. Have a Koha instance with reasonable number of biblio records 1. Set SearchEngine to Elasticsearch 3. In librarian interface, perform a search that would give you a list of results 4. With the new search box 'Search within results', having 'Keyword' and 'Keyword as phrase' active, try to perform a search within search results with a term that should give you some results 5. You should get no results 6. Apply the patch 7. Repeat steps 3 and 4 8. You should get expected results. Note the difference between 'Keyword' and 'Keyword as phrase' in results 9. Sign off --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index 53042b4303..02730e8054 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -1119,6 +1119,15 @@ sub _fix_limit_special_cases { elsif ( $l =~ /^available$/ ) { push @new_lim, 'available:true'; } + elsif ( $l =~ /^\s*(kw\b[\w,-]*?):(.*)/) { + my ( $field, $term ) = ($1, $2); + if ( defined($field) && defined($term) && $field =~ /,phr$/) { + push @new_lim, "(\"$term\")"; + } + else { + push @new_lim, $term; + } + } else { my ( $field, $term ) = $l =~ /^\s*([\w,-]*?):(.*)/; $field =~ s/,phr$//; #We are quoting all the limits as phrase, this prevents from quoting again later -- 2.30.2