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 <julian.maurice@biblibre.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
(cherry picked from commit 301ed1567b)
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
This commit is contained in:
Kevin Carnes 2022-02-08 14:48:19 +01:00 committed by Victor Grousset/tuxayo
parent 1708317b7b
commit 4086c1c4ff
1 changed files with 9 additions and 1 deletions

View File

@ -50,9 +50,9 @@ use Koha::SearchEngine::Search;
use Koha::Exceptions::Elasticsearch;
use MARC::Record;
use MARC::File::XML;
use Data::Dumper; #TODO remove
use Carp qw(cluck);
use MIME::Base64;
use JSON;
Koha::SearchEngine::Elasticsearch::Search->mk_accessors(qw( store ));
@ -95,12 +95,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;
}
@ -121,9 +125,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};
}