Skip to content

Commit

Permalink
Fix sorting on scripted date and boolean fields
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: elastic#9257
  • Loading branch information
Bargs committed Nov 29, 2016
1 parent 4cc4ddf commit 0d5a824
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 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,19 @@ export default function normalizeSortRequest(config) {
return normalized;
}
};

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 0d5a824

Please sign in to comment.