脚本比较日期

时间:2018-08-08 14:52:23

标签: elasticsearch

我想将弹性搜索日期与格式YYY-MM-DD HH:MM:SS进行比较,以比较过去30天的结果。因此,如果给定的日期等于NOW()-30D,它应该给我想要的结果。 我已经尝试过将这种方式与脚本进行比较,但是它不起作用:

getMillis(doc["date"].value) >= (new Date().getTime() - 30 * 24 * 60 * 60 * 1000) ? 1 : 0

另一项测试无效:

$total= new \Elastica\Aggregation\Sum('total');
$total->setScript('doc["date"].value >= (new Date().getTime() - 30) ? 1 : 0');

应该这样做:如果doc["date"].value大于或等于最近30天,则应该给我1,否则应该给我2。

我该如何实现?知道我正在使用groovy脚本。

2 个答案:

答案 0 :(得分:2)

您要查找的脚本如下:

ChronoUnit.DAYS.between(Instant.ofEpochMilli(doc['date'].date.millis), Instant.ofEpochMilli(new Date().getTime())) > 30 ? 0 : 1

我们计算从date字段到现在之间的天数。如果天数大于30,则返回0,否则返回1。

答案 1 :(得分:0)

您可以使用range query或日期范围聚合来达到相同的效果,我建议不要将脚本与弹性搜索一起使用,除非并且直到很难通过搜索查询获得结果为止