From 362e6bb92ea5cc2256180be37a4bb9d39c1422e8 Mon Sep 17 00:00:00 2001 From: Petro Vashchuk Date: Fri, 18 Jun 2021 10:01:18 +0300 Subject: [PATCH] Bug 28316: avoid messing up regexes in the search queries This patch ensures that the behavior with QueryRegexEscapeOptions set to values other than "Escape" still will works as expected. It does so by storing the contents of regexes before escaping special characters and then restores the contents of regexes back to how it was before, ensuring that searching with regex is possible. --- 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 3bc982f796..a91ca289e7 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -939,6 +939,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/(?