From 7c75a2c72d7f45657e981a53748a8448123cb330 Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 10 Oct 2019 16:06:08 +0000 Subject: [PATCH] Bug 23089: Fix sorting on sum and regular fields As of bug 20589 we no longer analyze sort fields and so we no longer need to append ".phrase" to our sort in searches. Additionally, sort fields based on 'sum' should also use sum in building the value to sort on To test: 0 - Be using ES 1 - Find the most circulated item in your collection 2 - Search for '*' 3 - Sort by popularity DESC 4 - Note that item is not first 5 - Try to sort by anything but relevancy, it fails 6 - Apply patch 7 - Redo searches and sorts 8 - Things should now work as expected Signed-off-by: Ere Maijala --- Koha/SearchEngine/Elasticsearch.pm | 1 + Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 3 --- admin/searchengine/elasticsearch/field_config.yaml | 1 + 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Koha/SearchEngine/Elasticsearch.pm b/Koha/SearchEngine/Elasticsearch.pm index 16532018ba..27ea6001d6 100644 --- a/Koha/SearchEngine/Elasticsearch.pm +++ b/Koha/SearchEngine/Elasticsearch.pm @@ -832,6 +832,7 @@ sub _get_marc_mapping_rules { if ($type eq 'sum') { push @{$rules->{sum}}, $name; + push @{$rules->{sum}}, $name."__sort" if $sort; } elsif ($type eq 'isbn') { push @{$rules->{isbn}}, $name; diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index 3e63086730..9bed437998 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -992,9 +992,6 @@ sub _sort_field { my $textField = defined $mappings->{data}{properties}{$f}{type} && $mappings->{data}{properties}{$f}{type} eq 'text'; if (!defined $self->sort_fields()->{$f} || $self->sort_fields()->{$f}) { $f .= '__sort'; - # We need to add '.phrase' to text fields, otherwise it'll sort - # based on the tokenised form. - $f .= '.phrase' if $textField; } else { # We need to add '.raw' to text fields without a sort field, # otherwise it'll sort based on the tokenised form. diff --git a/admin/searchengine/elasticsearch/field_config.yaml b/admin/searchengine/elasticsearch/field_config.yaml index 3494da45cf..e48cde7f57 100644 --- a/admin/searchengine/elasticsearch/field_config.yaml +++ b/admin/searchengine/elasticsearch/field_config.yaml @@ -65,3 +65,4 @@ sort: default: type: icu_collation_keyword index: false + numeric: true -- 2.17.1