【问题标题】:Using ElasticSearch painless scripting to compute dayOfWeek or timeOfDay使用 ElasticSearch 无痛脚本计算 dayOfWeek 或 timeOfDay
【发布时间】:2017-07-31 02:43:26
【问题描述】:

我使用 ES 5.1.2,我试图从 date 字段计算星期几和一天中的时间,同时考虑时区。

我的第一个脚本是def d = doc['my_field'].date; d.addHours(10); d.getDayOfWeek();

错误信息是找不到 addHours() 方法

"caused_by": {
    "type": "illegal_argument_exception",
    "reason": "Unable to find dynamic method [addHours] with [1] arguments for class [org.joda.time.MutableDateTime]."
},
"script_stack": [
    "d.addHours(10); ",
    " ^---- HERE"
],

如果我把脚本改成MutableDateTime d = doc['my_field'].date; d.addHours(10); d.getDayOfWeek(); 错误信息就变成了

"caused_by": {
  "type": "illegal_argument_exception",
  "reason": "unexpected token ['d'] was expecting one of [{<EOF>, ';'}]."
},
"script_stack": [
  "MutableDateTime d = doc['relation_denstu. ...",
  "                ^---- HERE"
],

没有addHours 调整时区,一切都很好。但是如果我尝试动态调整时区,一切都会失败。有什么帮助吗?

【问题讨论】:

    标签: elasticsearch elasticsearch-5 elasticsearch-painless


    【解决方案1】:

    我也一直在为此苦苦挣扎。这适用于 Elastic 5:

    GET /unittesttg1_tg1_fq1/_search
    {
      "size": 0,
      "aggs": {
        "groupby": {
          "terms": {
            "script": "ZonedDateTime.ofInstant(Instant.ofEpochMilli(doc['LAST_MODIFIED_DATE'].value), ZoneId.of('+10:00')).getDayOfWeek()"          
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多