从elasticsearch查询中的日期字段提取日期(yyyymmdd)

7eumitmz  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(445)

我的索引有一个日期字段,格式如下 2020-01-04T05:00:06.870000Z . 在es查询响应中,我需要表单中的日期 yyyyMMdd ,所以 20200104 . 我尝试使用脚本查询并分别提取了日、月和年。如何将它们串联在一起 _source 得到一个 number 窗体的 yyyyMMdd ?
样本数据:

"_source": {
    "updated": "2020-01-04T05:00:06.870000Z"
  }
  "_source": {
    "updated": "2020-01-04T09:00:08.870000Z"
  }
  "_source": {
    "updated": "2019-12-04T01:00:06.870000Z"
  }
}

查询:

"sort" : [
        { 
            "_script": {
                "type": "number",
                "script": {
                    "lang": "painless",
                    "source": "doc['updated'].value.getYear()"  
//similarly use getMonthOfYear() and getDayOfMonth(). How to concatenate and convert to number ?
                },
                "order": "desc"
            }
        }
    ]
p8h8hvxi

p8h8hvxi1#

你可以用 String.format 正确填写数字,然后 Integer.parseInt 结果如何。
或者,您可以使用以下方法:

GET dates/_search
{
  "sort": [
    {
      "_script": {
        "type": "number",
        "script": {
          "lang": "painless",
          "source": """
            Integer.parseInt(
              DateTimeFormatter
                .ofPattern("yyyyMMdd")
                .withZone(ZoneOffset.UTC)
                .format(Instant.ofEpochMilli(
                  doc['updated'].value.millis)
                ));
          """
        },
        "order": "desc"
      }
    }
  ]
}

相关问题