From fa2d2049599851c1b7beafc7d8fdb5cff3247bd8 Mon Sep 17 00:00:00 2001 From: Petro Vashchuk Date: Fri, 18 Jun 2021 10:01:18 +0300 Subject: [PATCH] Bug 28316: escape ES ranges if QueryAutoTruncate is enabled if QueryAutoTruncate enabled we will have any special operators ruined for example: "test [6 TO 7]" will be converted to "test* [6* TO* 7]" so no reason to keep ranges when QueryAutoTruncate set to "enabled" 1) enable QueryAutoTruncate at your sysprefs. 2) perform a search using range, for example: "[1999 TO 2020]", it shouldn't work the way it's supposed to. 3) apply the patch. 4) perform the same search with range, ensure that it works correctly. Signed-off-by: Alex Buckley --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index f10992c873..46656049e0 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -938,6 +938,15 @@ sub _clean_search_term { } $term = $self->_query_regex_escape_process($term); + # because of _truncate_terms and if QueryAutoTruncate enabled + # we will have any special operators ruined by _truncate_terms: + # for ex. search for "test [6 TO 7]" will be converted to "test* [6* TO* 7]" + # so no reason to keep ranges in QueryAutoTruncate==true case: + my $truncate = C4::Context->preference("QueryAutoTruncate") || 0; + unless($truncate) { + # replace all ranges with any square/curly brackets combinations to temporary substitutions (ex: "{a TO b]"" -> "~~LC~~a TO b~~RS~~") + $term =~ s/(?