Bug 33407: With ES and QueryAutoTruncate on, a search containing ISBD punctuation returns no results

With ES and QueryAutoTruncate on, a search with punctuation surrounded
by spaces (like ISBD punctuation copied from other catalogue or
bibliography) returns no results.  E.g.: in a search for "Maria Stuart ;
Die Jungfrau von Orleans / Schiller" (coded in record as 245 10 $a Maria
Stuart ; $b Die Jungfrau von Orleans / $c Schiller) -- both semicolon
and slash cause problems.  One had to remove them manually to get
results which is not what is desired.

Test plan
=========
1. Use ktd with Elasticsearch and ktd's test data
   (http://localhost:8081/cgi-bin/koha/catalogue/detail.pl?biblionumber=1):
2. Make a search for the first ISBD zone taken verbatim from the first record:
   E Street shuffle : the glory days of Bruce Springsteen & the E Street Band / Clinton Heylin

   There should be no result.
3. Apply teh patch, restart plack.
4. Repeat the search. You should get the record (and onother one).

Sponsored-by: Ignatianum University in Cracow
Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>
Signed-off-by: Thomas Klausner <domm@plix.at>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Janusz Kaczmarek 2023-04-04 16:42:02 +02:00 committed by Martin Renvoize
parent aa2befcec8
commit a871ad191b
No known key found for this signature in database
GPG Key ID: 422B469130441A0F
1 changed files with 3 additions and 0 deletions

View File

@ -1024,6 +1024,9 @@ sub clean_search_term {
# screen all brackets with backslash
$term =~ s/(?<!\\)(?:[\\]{2})*([\{\}\[\]])$lookahead/\\$1/g;
# remove problematic punctuation and escaped slashes surrounded by spaces if truncate
$term =~ s/\s+(\s*[&;,:\.=\-\/]|(\\\/)\s*)+\s$lookahead/ /g if $truncate;
# restore all regex contents after escaping brackets:
for (my $i = 0; $i < @saved_regexes; $i++) {
$term =~ s/~~RE$i~~/$saved_regexes[$i]/;