From 1044eb1f30042a6b869455f1107cfb7cbc9c6e4a 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 Signed-off-by: Martin Renvoize (cherry picked from commit 6a2ba8b6b23f482dcf8bbe53668d93519a11edf5) Signed-off-by: Lucas Gass --- Koha/SearchEngine/Elasticsearch.pm | 1 + Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 5 +---- admin/searchengine/elasticsearch/field_config.yaml | 9 +++------ 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Koha/SearchEngine/Elasticsearch.pm b/Koha/SearchEngine/Elasticsearch.pm index 64ed46194b..ffa3cbafcb 100644 --- a/Koha/SearchEngine/Elasticsearch.pm +++ b/Koha/SearchEngine/Elasticsearch.pm @@ -700,6 +700,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 63b9dbce7b..a556e4ec38 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -914,10 +914,7 @@ sub _sort_field { my $mappings = $self->get_elasticsearch_mappings(); my $fieldType = defined $mappings->{data}{properties}{$f}{type} ? $mappings->{data}{properties}{$f}{type} : undef; if (!defined $self->sort_fields()->{$f} || $self->sort_fields()->{$f}) { - $f .= '__sort' unless $fieldType eq 'integer'; - # We need to add '.phrase' to text fields, otherwise it'll sort - # based on the tokenised form. - $f .= '.phrase' if $fieldType eq 'text'; + $f .= '__sort'; } 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 0baddf3a02..495224a5a7 100644 --- a/admin/searchengine/elasticsearch/field_config.yaml +++ b/admin/searchengine/elasticsearch/field_config.yaml @@ -64,9 +64,6 @@ suggestible: # Sort sort: default: - type: text - analyzer: analyser_phrase - search_analyzer: analyser_phrase - fields: - phrase: - type: keyword + type: icu_collation_keyword + index: false + numeric: true -- 2.39.5