Bug 28610: Elasticsearch 7 - hits.total is now an object
authorKevin Carnes <kevin.carnes@ub.lu.se>
Tue, 8 Feb 2022 13:48:19 +0000 (14:48 +0100)
committerFridolin Somers <fridolin.somers@biblibre.com>
Mon, 4 Apr 2022 14:23:46 +0000 (16:23 +0200)
In Elasticsearch 7 hits.total is now an object which is not always an exact
value. You can always get an exact total by adding a track_total_hits
parameter set to true when using the Elasticsearch search method

To test:
1) Run prove t/db_dependent/Koha/SearchEngine/Elasticsearch/Search.t
2) If you observe an error about types, apply patch for bug 25669
3) Run prove t/db_dependent/Koha/SearchEngine/Elasticsearch/Search.t
4) Observe that tests with count fail
5) Apply patch
6) Observe that tests with count pass
7) Sign off

Sponsored-by: Lund University Library
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
Koha/SearchEngine/Elasticsearch/Search.pm
cpanfile

index b616b4e..fc7eda5 100644 (file)
@@ -51,6 +51,7 @@ use Koha::Exceptions::Elasticsearch;
 use MARC::Record;
 use MARC::File::XML;
 use MIME::Base64 qw( decode_base64 );
+use JSON;
 
 Koha::SearchEngine::Elasticsearch::Search->mk_accessors(qw( store ));
 
@@ -93,12 +94,16 @@ sub search {
     my $results = eval {
         $elasticsearch->search(
             index => $self->index_name,
+            track_total_hits => JSON::true,
             body => $query
         );
     };
     if ($@) {
         die $self->process_error($@);
     }
+    if (ref $results->{hits}->{total} eq 'HASH') {
+        $results->{hits}->{total} = $results->{hits}->{total}->{value};
+    }
     return $results;
 }
 
@@ -119,9 +124,13 @@ sub count {
     # and just return number of hits
     my $result = $elasticsearch->search(
         index => $self->index_name,
+        track_total_hits => JSON::true,
         body => $query
     );
 
+    if (ref $result->{hits}->{total} eq 'HASH') {
+        return $result->{hits}->{total}->{value};
+    }
     return $result->{hits}->{total};
 }
 
index c96bdae..c9b4c51 100644 (file)
--- a/cpanfile
+++ b/cpanfile
@@ -91,7 +91,7 @@ requires 'Plack::Middleware::LogWarn', '0.001002';
 requires 'Plack::Middleware::ReverseProxy', '0.14';
 requires 'Readonly', '2.00';
 requires 'Schedule::At', '1.06';
-requires 'Search::Elasticsearch', '5.01';
+requires 'Search::Elasticsearch', '6.00';
 requires 'Sereal::Decoder', '3.0';
 requires 'Sereal::Encoder', '3.0';
 requires 'Storable', '2.20';