From 692b91521fc49c85145e6004a201907492b4f4d0 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 Signed-off-by: Emmi Takkinen Signed-off-by: Nick Signed-off-by: Tomas Cohen Arazi (cherry picked from commit eb5cc8d708faf7debcee35ce387329373e0bc40e) Signed-off-by: Matt Blenkinsop --- 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 d5dbdee886..e91c4d7e16 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -1131,6 +1131,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.39.5