如何更新elasticsearch中的日期字段

时间:2016-02-29 08:26:20

标签: elasticsearch groovy

我的弹性索引中有数据如下:

索引数据为:

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'

使用

获得的映射
  

curl -XGET localhost:9200 / twitter

     

{"叽叽喳喳" {"别名":{},"映射" {"鸣叫" {"属性" {"消息" {"类型":"串"}" POST_DATE" {"类型& #34;:"日期""格式":" strict_date_optional_time || epoch_millis"}"使用者" {"类型& #34;:"串"}}}}"设置" {"指数" {" CREATION_DATE":" 1456739938440"" number_of_shards":" 5"" number_of_replicas":" 1""的uuid&#34 ;: " DwhS57l1TsKQFyzY23LSiQ""版本" {"创建":" 2020099"}}}"保温":{ }}}

现在,如果我正在修改用户,我可以这样做:

curl -XPOST 'http://localhost:9200/twitter/tweet/1/_update' -d '{
   "script" : "ctx._source.user=new_user",
   "params" : {
      "new_user" : "search"
   }
}'

但是当我尝试修改日期字段时,它会给出一个例外:

curl -XPOST 'http://localhost:9200/twitter/tweet/1/_update' -d '{
   "script" : "ctx._source.post_date='new-date'",
   "params" : {
      "new-date" : "2016-02-02T16:12:23"
   }
}'

收到的例外是:

  

{"错误" {" ROOT_CAUSE":[{"类型":" remote_transport_exception""理由&#34 ;:" [异常] [127.0.0.1:9300] [指数:数据/写/更新[S]]"}],"类型":" illegal_argument_exception&# 34;,"理由":"失败   执行   脚本"," caused_by":{" type":" script_exception"," reason":"失败   使用lang编译内联脚本[ctx._source.post_date = new-date]   [常规]"" caused_by" {"类型":" script_exception""理由":"失败至   编译groovy   脚本"," caused_by":{"输入":" multiple_compilation_errors_exception","原因":"启动失败:\ ne90a551666b36d90e4fc5b08d04250da5c4d552d:1:意外   令牌: - @第1行,第26列。\ n ctx._source.post_date = new-date \ n
  ^ \ n \ n1错误\ n"}}}}

现在任何人都可以告诉我如何处理相同的事情。

〜PRASHANT

2 个答案:

答案 0 :(得分:1)

POST your_index_name/_update_by_query?conflicts=proceed
{
    "script" : {
      "source": "ctx._source.publishedDate=new SimpleDateFormat('yyyy-MM-dd').parse('2021-05-07')",
      "lang": "painless"  
    }
}
  • publishedDate - 日期字段的名称。
  • Your_index_name 您索引的名称

答案 1 :(得分:0)

在Groovy(或Java)中,标识符不能包含“ - ”。如果你写

ctx._source.last-login = new-login

Groovy(和java!)将其解析为:

(ctx._source.last)-(login) = (new)-(login)

您应该引用这些属性:

ctx._source.'last-login' = 'new-login'