首页 > 解决方案 > 带日期的 Elasticsearch 无痛脚本

问题描述

我有一个包含日期字段的文档。我想按此日期 ASC 对文档进行排序,但我希望最后有过去日期的文档。

最后,就像我想将文档值分配给一个新值:-如果日期是>“utc now”,则将值分配给任何日期-如果日期是<“utc now”,然后将值分配给最大日期

然后,我可以按此字段 ASC 排序。

因此,似乎实现这一目标的唯一方法是使用无痛脚本。

这是我到目前为止所得到的,有效..但不确定这是否是正确的方法。

GET /listings/_search
{
  "track_total_hits": true,
  "from": 0,
  "query": {
     "match_all": {}
  },
  "size": 48,
  "sort": [
    {
      "_script" : {
        "type": "string",
        "script": {
          "lang": "painless",
          "source": "if (doc['auctionOn.utc'].size() == 0) { return params['maxTimestamp'].toString(); } else { long timestampDoc = doc['auctionOn.utc'].value.toInstant().toEpochMilli();long timestampNow = new Date().getTime();if (timestampDoc > timestampNow) { return timestampDoc.toString(); } else { return params['maxTimestamp'].toString(); } }",
          "params": {
            "maxTimestamp": 9223372036854776000
          }
        },
        "order": "asc"
      }        
    }
  ]
}

有人可以告知这是否是正确/有效的方法吗?

标签: elasticsearchelasticsearch-painless

解决方案


推荐阅读