From 301ed1567b78956b7d6ec9ef2378e37f87ca1371 Mon Sep 17 00:00:00 2001 From: Kevin Carnes Date: Tue, 8 Feb 2022 14:48:19 +0100 Subject: [PATCH] Bug 28610: Elasticsearch 7 - hits.total is now an object 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 Signed-off-by: Nick Clemens Signed-off-by: Fridolin Somers Signed-off-by: Kyle M Hall --- Koha/SearchEngine/Elasticsearch/Search.pm | 9 +++++++++ cpanfile | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Koha/SearchEngine/Elasticsearch/Search.pm b/Koha/SearchEngine/Elasticsearch/Search.pm index e753220948..49474ecb19 100644 --- a/Koha/SearchEngine/Elasticsearch/Search.pm +++ b/Koha/SearchEngine/Elasticsearch/Search.pm @@ -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}; } diff --git a/cpanfile b/cpanfile index ca9463e789..cd4d9d0960 100644 --- 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'; -- 2.39.5