elasticsearch 如何在elasticsearch中更新日期字段,elasticsearch,groovy,elasticsearch,Groovy" /> elasticsearch 如何在elasticsearch中更新日期字段,elasticsearch,groovy,elasticsearch,Groovy" />

elasticsearch 如何在elasticsearch中更新日期字段

elasticsearch 如何在elasticsearch中更新日期字段,elasticsearch,groovy,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 {“推特”:{“别名”:{},“映射”:{“推特”

我的弹性指数中的数据如下:

索引数据为:

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

{“推特”:{“别名”:{},“映射”:{“推特”:{“属性”:{“消息”:{“类型”:“字符串”},“发布日期”:{“类型”:“日期”,“格式”:“严格日期”可选{时间| |纪元|米利斯”},“用户”:{“类型”:“字符串”}}},“设置”:{“索引”:{“创建日期”:“1456739938440”,“碎片数”:“5”,“副本数”:“1”,“UUTSQUID”;“版本”:{“已创建”:“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"
   }
}'
收到的例外情况是:

{“错误”:{“根本原因”:[{“类型”:“远程传输异常”,“原因”:“[异常][127.0.0.1:9300][index:data/write/update[s]]”,“类型”:“非法参数异常”,“原因”:“失败” 执行 脚本“,”原因“:{”类型“:”脚本异常“,”原因“:”失败 使用lang编译内联脚本[ctx.\u source.post\u date=new date] [groovy],“原因”:{“类型”:“脚本异常”,“原因”:“未能执行” 编译groovy 脚本“,”由“{”类型“:”多个编译错误“,”异常“,”原因“:”启动失败:\NE90A551666B36D90E4FC5B08D04250DA5C4552D:1:意外 令牌:-@第1行第26列。\n ctx.\u source.post\u date=新日期\n
^\n\n1错误\n“}}

现在有人能告诉我如何处理同样的问题吗

~Prashant

在Groovy(或Java)中,标识符不能包含“-”

ctx._source.last-login = new-login
Groovy(和java!)将其解析为:

(ctx._source.last)-(login) = (new)-(login)
您应该引用以下属性:

ctx._source.'last-login' = 'new-login'
  • publishedDate—日期字段的名称
  • 你的索引名称你的索引名称

你能使用
curl-XGET localhost:9200/你的_索引
分享你的映射吗?哪一个例外?问一个明显的问题,你确定你没有写
上次登录
新登录
?在上面的例子中
-
在哪里?@JérémieB为输入错误道歉,是的,在我的实际问题中,我们上次遇到了-登录和新登录..这是一个问题,但我也尝试了新登录,因此它也给出了一个例外-在日期值中存在?@Val:mapping与上次登录类似:键入:日期,格式:日期时间\u无百万,即使我尝试了相同的,当我添加引号时,弹性会继续挂起,永远不会返回,并且需要要手动终止服务以使其正常工作,此行为可能与以下表达式无关:如果出现错误,ElasticSearch在开始时失败,并且什么也不做。是的,那么我们如何才能找到ElasticSearch失败的确切位置。脚本是有条件的,如果条件满足,将执行。您可能应该问另一个问题:th一个是关于Groovy表达式的。这里没有任何上下文可以帮助您解决ES中的故障(您执行的请求?映射?ES中的日志?可复制的测试?)但是它给出的例外与groovy有关,所以尽管在groovy论坛上提问,顺便说一句,我将用实时数据和字段以及映射更新这个问题,以便您能够从相同的形式获得一些东西。
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"  
    }
}