基于多个字段和时间条件的Elasticsearch排序

佩特里H

我有一个小的在线商店应用程序,我想根据商品的活跃价格对其进行排序。因此,存在正常价格,并且可以选择打折。但是折价仅在一个时间范围内有效,并且折价结束后不会更新索引。例如:

{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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章