Skip to content

Commit

Permalink
Fix sorting on scripted date and boolean fields (#9261)
Browse files Browse the repository at this point in the history
The elasticsearch API only [supports][1][2] sort scripts of type `number` and
`string`. Since dates need to be returned as millis since the epoch for
visualizations to work anyway, we can simply add a condition to send dates
as type number in the sort API. ES will cast booleans if we tell them
its a string, so we can add a similar condition there as well.

[1]: https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-request-sort.html#_script_based_sorting
[2]: https://github.com/elastic/elasticsearch/blob/aeb97ff41298e26b107a733837dfe17f123c0c9b/core/src/main/java/org/elasticsearch/search/sort/ScriptSortBuilder.java#L359

Fixes: #9257
  • Loading branch information
Matt Bargar authored Nov 30, 2016
1 parent 0266a9a commit cd3269b
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion src/ui/public/courier/data_source/_normalize_sort_request.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export default function normalizeSortRequest(config) {
inline: indexField.script,
lang: indexField.lang
},
type: indexField.type,
type: castSortType(indexField.type),
order: direction
};
} else {
Expand All @@ -56,3 +56,20 @@ export default function normalizeSortRequest(config) {
return normalized;
}
};

// The ES API only supports sort scripts of type 'number' and 'string'
function castSortType(type) {
const typeCastings = {
number: 'number',
string: 'string',
date: 'number',
boolean: 'string'
};

const castedType = typeCastings[type];
if (!castedType) {
throw new Error(`Unsupported script sort type: ${type}`);
}

return castedType;
}

0 comments on commit cd3269b

Please sign in to comment.