From a0a6af1848e7f01e916f2de54c8bffc483560908 Mon Sep 17 00:00:00 2001 From: Kevin Carnes Date: Tue, 8 Feb 2022 14:35:18 +0100 Subject: [PATCH] Bug 27770: ES: Deprecated aggregation order key [_term] used, replaced by [_key] Starting in Elasticsearch 6.0 _key should be used instead of _term to order buckets by their term 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 if you get a deprecation warning about order key 5) Apply patch 6) Run prove t/db_dependent/Koha/SearchEngine/Elasticsearch/Search.t 7) Observe no deprecation warning about order key 8) Sign off Sponsored-by: Lund University Library --- Koha/SearchEngine/Elasticsearch.pm | 1 + Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 8 +++++++- .../Koha/SearchEngine/Elasticsearch/QueryBuilder.t | 11 +++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Koha/SearchEngine/Elasticsearch.pm b/Koha/SearchEngine/Elasticsearch.pm index 203183138f..c04c2173d6 100644 --- a/Koha/SearchEngine/Elasticsearch.pm +++ b/Koha/SearchEngine/Elasticsearch.pm @@ -104,6 +104,7 @@ sub get_elasticsearch { $self->{elasticsearch} = Search::Elasticsearch->new( $self->get_elasticsearch_params() ); + $self->{es_version} = $self->{elasticsearch}->info->{version}{number}; } return $self->{elasticsearch}; } diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index 607634c405..9282996d82 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -44,6 +44,7 @@ use JSON; use List::MoreUtils qw( each_array ); use Modern::Perl; use URI::Escape qw( uri_escape_utf8 ); +use version; use C4::Context; use Koha::Exceptions; @@ -639,11 +640,16 @@ sub _build_scan_query { query => '*' } }; + my $es_key = '_key'; + $self->get_elasticsearch(); + if (version->parse($self->{es_version}) < version->parse('6.0.0')) { + $es_key = '_term'; + } $res->{aggregations} = { $index => { terms => { field => $index . '__facet', - order => { '_term' => 'asc' }, + order => { $es_key => 'asc' }, include => $self->_create_regex_filter($self->clean_search_term($term)) . '.*' } } diff --git a/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t b/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t index 2991ee39b6..b879dd22ba 100755 --- a/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t +++ b/t/db_dependent/Koha/SearchEngine/Elasticsearch/QueryBuilder.t @@ -29,6 +29,8 @@ use List::Util qw( all ); use Koha::Database; use Koha::SearchEngine::Elasticsearch::QueryBuilder; +use version; + my $schema = Koha::Database->new->schema; $schema->storage->txn_begin; @@ -231,6 +233,11 @@ subtest 'build_query tests' => sub { my %options; $options{sort} = \@sort_params; my $query = $qb->build_query('test', %options); + my $es_key = '_key'; + $qb->get_elasticsearch(); + if (version->parse($qb->{es_version}) < version->parse('6.0.0')) { + $es_key = '_term'; + } is_deeply( $query->{sort}, @@ -507,7 +514,7 @@ subtest 'build_query tests' => sub { $query->{aggregations}{'author'}{'terms'}, { field => 'author__facet', - order => { '_term' => 'asc' }, + order => { $es_key => 'asc' }, include => '[nN][eE][wW].*' }, "scan aggregation request is properly formed" @@ -525,7 +532,7 @@ subtest 'build_query tests' => sub { $query->{aggregations}{'subject'}{'terms'}, { field => 'subject__facet', - order => { '_term' => 'asc' }, + order => { $es_key => 'asc' }, include => '[nN][eE][wW].*' }, "scan aggregation request is properly formed" -- 2.17.1