gpt4 book ai didi

sorting - Elasticsearch使用脚本对日期桶进行排序

转载 作者:行者123 更新时间:2023-12-02 22:57:24 25 4
gpt4 key购买 nike

我对Elasticsearch有一个有趣的排序问题。我有以下数据:

Item =>     A     B      C         D    E    F
Time => -3 -2 -1 0 1 2 3

上图显示了我有6条数据,项A-F,它们分别在-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' } },
]

上面的方法确实将将来的项目放在第一位,将过去的项目放在第二位,但是它并没有按照升序对 future 的项目进行排序(它对过去的项目进行排序,并且针对该事件的所有项目都以降序排列)。

我不确定我可以编写哪种脚本来根据第一个脚本的结果将将来的项目与过去的项目分开排序。

任何帮助将非常感激。

最佳答案

我相信您已经很接近了,但是对于“ future ”日期,必须返回一些值而不是1。

尝试用1代替1.0/doc['start_date'].value,使其与日期成反比(将来更大的日期值)。

上面的完整示例:

sort: [
{
_script: {
type: 'number',
script: {
lang: 'painless',
inline: "if (doc['item_date'].value > params.current_time) {return 1.0/doc['start_date'].value;} else {return 0}",
params: {
current_time,
},
},
order: 'desc',
},
},
{ item_date: { order: 'desc' } },
]

关于sorting - Elasticsearch使用脚本对日期桶进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47802307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com