当前位置: 首页 > 知识库问答 >
问题:

elasticsearch-无痛-操纵日期

慕容高卓
2023-03-14

我正在尝试用elasticsearch的脚本语言<code>无痛地操纵日期。具体来说,我试图增加4小时,即14400秒。

{
  "script_fields": {
    "new_date_field": {
      "script": {
        "inline": "doc['date_field'] + 14400"
      }
    }
  }
}

这将导致< code >无法对类型[org . elastic search . index . field data . scriptdocvalues . longs]和[java.lang.Integer]应用[ ]操作。

谢谢

共有2个答案

滕星纬
2023-03-14

添加。将日期转换为字符串,我相信这是您的第一部分,可以通过以下操作完成:

def dt = String.valueOf(ctx._source.date_field);

只是花了几个小时玩这个..所以我可以将日期字段(UTC格式,添加了00:00:00)连接到带有时间的字符串中,以获得要添加到ES的有效日期时间。不要问为什么它被拆分了,这是一个旧的甲骨文系统

西门靖琪
2023-03-14

解决方案是使用 .value

{
  "script_fields": {
    "new_date_field": {
      "script": {
        "inline": "doc['date_field'].value + 14400"
      }
    }
  }
}

然而,我实际上想用它来重新索引,格式有点不同。下面是我在< code>_reindex api中操作时间的版本

POST _reindex
{
  "source": {
    "index": "some_index_v1"
  },
  "dest": {
    "index": "some_index_v2"
  },
  "script": {
    "inline": "def sf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss\"); def dt = sf.parse(ctx._source.date_field); def calendar = sf.getCalendar(); calendar.setTime(dt); def instant = calendar.toInstant(); def localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); ctx._source.date_field = localDateTime.plusHours(4);"
  }
}

以下是可读版本的内联脚本

def sf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss\");
def dt = sf.parse(ctx._source.date_field);
def calendar = sf.getCalendar();
calendar.setTime(dt);
def instant = calendar.toInstant();
def localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
ctx._source.date_field = localDateTime.plusHours(4);

这是无痛支持的功能列表,很痛苦。

 类似资料:
  • 我有一个 Elasticsearch 的搜索查询,它使用一个时髦的内联脚本,我需要将其转换为 Painless 语言 如您所见,这获取了“事件开始日期”,去掉了时间(设置为00:00:00) 然后与当前日期(dtnow)进行比较,如果小于当前日期,则将其更改为当前日期(实际上没有过去的日期,只有今天以后的日期) 我不是一个Java程序员,我相信无痛的日期处理已经改变,所以希望转换上述? 谢谢

  • 我没有Java经验,我对elasticsearch无痛脚本语言有问题。(这个名字叫“无痛”,选得不好)。 对于下面的代码,我得到了错误: 无法应用 [ 我用(float) doc['newPrice']将它绑定为float 然后我改为<code>“Double price=((Double)doc['discountPrice'] 并收到: “无法从[双]铸造到[双]。” 有人可以帮助我,尝试了很

  • 问题内容: 我正在尝试使用Elasticsearch的脚本语言来操纵日期。具体来说,我尝试增加4小时,即14,400秒。 这抛出 谢谢 问题答案: 解决方案是使用 但是,我实际上想将其用于重新索引,但格式略有不同。这是我在api中操纵时间的版本 这是可读版本的内联脚本 这是无痛支持的功能列表,很痛苦。

  • 我用ES 5.5的时候更新到6.7。无痛脚本不起作用 这是5.5如果我想获取嵌套文档[transFilter]我这样做 效果很好。 但是 当我使用6.7版本时 params['_source']['carFilter'] 我发现它不起作用 所有参数['_source']为空 我的映射 我的数据示例 和我的查询脚本示例 甚至没有错误只有事实 这一行已经返回 上面的简单无痛只是为了说明问题,下面附上了

  • 为什么下面的语句出现错误 当以下代码正常工作时

  • 用 upstart 控制 Ceph 用 ceph-deploy 把 Ceph Cuttlefish 及更高版部署到 Ubuntu 之后,你可以用基于事件的 Upstart 来启动、关闭 Ceph 节点上的守护进程。 Upstart 不要求你在配置文件里定义守护进程例程。 用下列命令列出 Ceph 作业和例程: sudo initctl list | grep ceph 详情参见 initctl 。