From 6d26988d303e880f6d9a167132dcb9c29c421c87 Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Tue, 21 Mar 2023 19:28:10 +0000
Subject: [PATCH] Bug 33277: Add comments and missing thesauri

Signed-off-by: Frank Hansen <frank.hansen@ub.lu.se>
---
 C4/Heading.pm                                  |  2 ++
 C4/Heading/MARC21.pm                           |  5 +++++
 .../SearchEngine/Elasticsearch/QueryBuilder.pm | 18 ++++++++++++------
 t/db_dependent/Heading.t                       |  3 +++
 4 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/C4/Heading.pm b/C4/Heading.pm
index 3054fc5305..5c393b4d53 100644
--- a/C4/Heading.pm
+++ b/C4/Heading.pm
@@ -202,6 +202,8 @@ sub _search {
     my @operator;
     my @value;
 
+    # FIXME: We specify values for @and_or and @excluding
+    # but these fields are not used anywhere and should be removed
     if ($index) {
         push @marclist, $index;
         push @and_or,   'AND';
diff --git a/C4/Heading/MARC21.pm b/C4/Heading/MARC21.pm
index 652c300282..e8d6f90553 100644
--- a/C4/Heading/MARC21.pm
+++ b/C4/Heading/MARC21.pm
@@ -359,6 +359,11 @@ sub _get_subject_thesaurus {
     my $field = shift;
     my $ind2  = $field->indicator(2);
 
+    # NOTE: sears and aat do not appear
+    # here as they do not have indicator values
+    # though the 008 in the authority records
+    # do have values for them
+
     my $thesaurus = "notdefined";
     if ( $ind2 eq '0' ) {
         $thesaurus = "lcsh";
diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm
index d5dbdee886..5f4f7398e2 100644
--- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm
+++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm
@@ -564,14 +564,20 @@ our $koha_to_index_name = {
     all             => ''
 };
 
+# Note that sears and aat map to 008/11 values here
+# but don't appear in C4/Headin/MARC21 thesaurus
+# because they don't have values in controlled field indicators
+# https://www.loc.gov/marc/authority/ad008.html
 our $thesaurus_to_value = {
-   lcsh => 'a',
-   lcac => 'b',
-   mesh => 'c',
-   nal  => 'd',
+   lcsh  => 'a',
+   lcac  => 'b',
+   mesh  => 'c',
+   nal   => 'd',
    notspecified => 'n',
-   cash => 'k',
-   rvm => 'v',
+   cash  => 'k',
+   rvm   => 'v',
+   aat   => 'r',
+   sears => 's'
 };
 
 sub build_authorities_query_compat {
diff --git a/t/db_dependent/Heading.t b/t/db_dependent/Heading.t
index 92d52e1c38..26c4d8da28 100755
--- a/t/db_dependent/Heading.t
+++ b/t/db_dependent/Heading.t
@@ -69,6 +69,9 @@ subtest "_search tests" => sub {
 
     t::lib::Mocks::mock_preference('marcflavour', 'MARC21');
     t::lib::Mocks::mock_preference('SearchEngine', 'Elasticsearch');
+    # NOTE: We are testing solely against ES here to make the assumptions simpler while testing
+    # C4/Headings code specifically. The actual query building and searching code should
+    # be covered in other test files
     my $search = Test::MockModule->new('Koha::SearchEngine::Elasticsearch::Search');
 
     $search->mock('search_auth_compat', sub {
-- 
2.30.2