我有一个小的在线商店应用程序,我想根据商品的活跃价格对其进行排序。因此,存在正常价格,并且可以选择打折。但是折价仅在一个时间范围内有效,并且折价结束后不会更新索引。例如:
{price: 2.00, discount:{price:1.10, start:2016-08-11, end:2016-09-14}}
排序中是否可以包含这种条件?目的是在任何给定时间确保正确的排序顺序。
编辑:目前,ES版本比较旧,但是更新到最新版本不是问题。
这是针对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"
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句