我想将弹性搜索日期与格式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脚本。
答案 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或日期范围聚合来达到相同的效果,我建议不要将脚本与弹性搜索一起使用,除非并且直到很难通过搜索查询获得结果为止