Elasticsearch基于几个字段和时间条件进行排序

时间:2017-06-13 12:57:35

标签: elasticsearch

我有一个小的在线商店应用程序,我想根据他们的有效价格对项目进行排序。所以有一个正常的价格和可选的折扣价格。但折扣价仅在一个时间范围内有效,折扣结束时索引不会更新。例如:

{price: 2.00, discount:{price:1.10, start:2016-08-11, end:2016-09-14}}

是否可以在排序中包含这样的条件?目标是在任何给定时间确保正确的排序顺序。

编辑:目前ES版本相当陈旧,但更新到最新版本不是问题。

1 个答案:

答案 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"
    }
  }