我的弹性索引中有数据如下:
索引数据为:
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
答案 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"
}
}
答案 1 :(得分:0)
在Groovy(或Java)中,标识符不能包含“ - ”。如果你写
ctx._source.last-login = new-login
Groovy(和java!)将其解析为:
(ctx._source.last)-(login) = (new)-(login)
您应该引用这些属性:
ctx._source.'last-login' = 'new-login'