【问题标题】:Elasticsearch Convert string field to dateElasticsearch 将字符串字段转换为日期
【发布时间】:2017-08-25 06:55:28
【问题描述】:

我有一个类型为“文档”的索引。它有一个字符串类型的字段,名称为“日期”,条目的格式为“MMM dd, yyyy hh:mm:ss a”。

我希望将此字段的数据类型从字符串转换为日期,这是不可能的。 因此,我修改了映射以添加一个新字段“已发布”,类型为“日期”和格式。我现在需要在将日期字段中的值更改为日期对象后将其复制到发布的字段中。我尝试了以下更新查询

POST /my-index/document/_update_by_query
{
    "query" : {
        "match_all" : {}
    },
    "script": "ctx._source['posted'] = new Date().parse(\"MMM dd, yyyy hh:mm:ss a\",ctx._source['date'])"
}

但它给了我这个错误,

java.lang.String cannot be cast to java.util.Map

我哪里出错了?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您无需在脚本中创建Date 类型,只需将值分配给posted 字段,Elasticsearch 将在索引操作发生时完成其余工作。

    您还需要更改脚本的结构

    "script": {
      "inline": "ctx._source['posted'] = ctx._source.foo"
    }
    

    【讨论】:

    • "script": "ctx._source['posted'] = ctx._source['date']" 仍然给我同样的错误
    • 命中发送到早期,也修复了脚本
    • "script": "ctx._source['posted'] = ctx._source.date" 仍然给出同样的错误
    猜你喜欢
    • 2020-12-01
    • 2018-07-08
    • 1970-01-01
    • 2015-04-27
    • 2016-06-13
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多