From 2b769cbc321ae5a1946b6add1840122afa0ce507 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: Hayley Mapley --- 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 0a14e8d0b7..e7c1e1e903 100644 --- a/Koha/SearchEngine/Elasticsearch.pm +++ b/Koha/SearchEngine/Elasticsearch.pm @@ -699,6 +699,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 ee8cb6c6c8..8388806269 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -909,10 +909,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