From 194d7999cafe92fbc66156399fb93443d1ec1324 Mon Sep 17 00:00:00 2001 From: Janusz Kaczmarek Date: Thu, 16 May 2024 11:29:04 +0000 Subject: [PATCH] Bug 36798: Add ability to search across all ISBNs using the ISBN-search With the Bug 36574 we added a new ES search field isbn-all which makes it possible to find records with the content of the subfield 020 $z (invalid/cancelled ISBN) in general search (by keyword). But still, when performing a search with ISBN-search these records will not be found. Since some libraries deliberately want to find records with only 020 $a with ISBN-search, a system preference would be needed here to be able to customize the ISBN search. The same for ISSNs, with one system preference. Test plan: ========== (ISBN) ------ 1. Have the ktd with with ES enabled. 2. With standard ktd test data, try to perform a ISBN search from Advanced search for 9780141930848. You should get no results. In the general search input field (on the main page) try a search nb:9780141930848 and/or isbn:9780141930848 - you should get no results. 3. Apply the patch, restart_all. 4. Repeat p. 2 -- you should still get no results. 5. Enable SearchCancelledAndInvalidISBNandISSN syspref. 6. Repeat p. 2 -- now you should get one record (having 9780141930848 in 020 $z). (ISSN) ------ 0. Return to main, delete the bug branch, reset_all == start from fresh. 1. Have the ktd with with ES enabled. 2. With standard ktd test data, try to perform a ISSN search from Advanced search for 1089-6891. You should get no results. In the general search input field (on the main page) try a search ns:1089-6891 and/or issn:1089-6891 - you should get no results. 3. Apply the patch, restart_all. If you have had to apply also the bug 36727, reindex ES with: koha-elasticsearch --rebuild -r -d kohadev (there is a modification of mappings.yaml) 4. Repeat p. 2 -- you should still get no results. 5. Enable SearchCancelledAndInvalidISBNandISSN syspref. 6. Repeat p. 2 -- now you should get one record (having 1089-6891 in 022 $y). Sponsored-by: Ignatianum University in Cracow Signed-off-by: Roman Dolny Signed-off-by: Lucas Gass Signed-off-by: Katrin Fischer --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index b641e97404..c5596f2e99 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -753,6 +753,8 @@ sub _convert_index_fields { field => exists $index_field_convert{$f} ? $index_field_convert{$f} : $f, type => $index_type_convert{ $t // '__default' } }; + $r->{field} .= '-all' + if C4::Context->preference('SearchCancelledAndInvalidISBNandISSN') && $r->{field} =~ /^is[bs]n$/; $r->{field} = ($mc . $r->{field}) if $mc && $r->{field}; $r->{field} || $r->{type} ? $r : undef; } @indexes; @@ -820,6 +822,9 @@ sub _convert_index_strings_freeform { $search =~ s/($field_name_pattern)(?:,[\w-]*)?($multi_field_pattern):/\L$1\E$2:/og; # Resolve possible field aliases $search =~ s/($field_name_pattern)($multi_field_pattern):/(exists $index_field_convert{$1} ? $index_field_convert{$1} : $1).($1 eq 'kw' ? "$2" : "$2:")/oge; + if ( C4::Context->preference('SearchCancelledAndInvalidISBNandISSN') ) { + $search =~ s/\b(is[bs]n)(?=$multi_field_pattern:)/$1-all/g; + } return $search; } -- 2.39.5