我对 Elasticsearch 有一个有趣的排序问题。我有以下数据:
Item => A B C D E F
Time => -3 -2 -1 0 1 2 3
上图显示,我有 6 条数据,项 AF,它们分别出现在 -3 和 3 之间的某个时间,此时当前时间为 t0。
我希望在 Elasticsearch 中创建一个排序,它按以下顺序对项目进行排序:
DEFCBA
也就是说,未来发生的任何项目在结果中排在第一位,并按升序排序,过去发生的任何项目在结果中排在第二位,并按降序排列。
到目前为止,我有以下排序:
sort: [
{
_script: {
type: 'number',
script: {
lang: 'painless',
inline: "if (doc['item_date'].value - params.current_time > 0) {return 1;} else {return 0}",
params: {
current_time,
},
},
order: 'desc',
},
},
{ item_date: { order: 'desc' } },
]
上面确实将未来的项目放在第一位,过去的项目放在第二位,但它没有按升序对未来的项目进行排序(它对过去的项目进行排序,并且所有项目都按降序排列)。
我不确定我可以编写什么脚本来根据第一个脚本的结果将未来的项目与过去的项目分开排序。
任何帮助将非常感激。