我有一个小的在线商店应用程序,我想根据他们的有效价格对项目进行排序。所以有一个正常的价格和可选的折扣价格。但折扣价仅在一个时间范围内有效,折扣结束时索引不会更新。例如:
{price: 2.00, discount:{price:1.10, start:2016-08-11, end:2016-09-14}}
是否可以在排序中包含这样的条件?目标是在任何给定时间确保正确的排序顺序。
编辑:目前ES版本相当陈旧,但更新到最新版本不是问题。
答案 0 :(得分:2)
这适用于Elasticsearch 5和6(正如我所说,你没有提及discount
字段的版本和映射。此外,每当运行该查询时,您都需要以毫秒为单位显式传递当前日期和时间:
"sort": {
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "if (doc['discount.price']!=null && doc['discount.start'].date.getMillis() < params['time'] && doc['discount.end'].date.getMillis() > params['time']) return doc['discount.price'].value; else return doc['price'].value",
"params": {
"time": 1512717897000
}
},
"order": "desc"
}
}