使用CTX查询Elasticsearch更新
我想更新索引内的所有文档。我发现Update Query是我们应该使用的方法。但是,当我将ctx._now用作更新文档字段的值时,我遇到了问题,导致字段值为空。使用CTX查询Elasticsearch更新
这是样板:
{
"script": {
"inline": "ctx._source.timenow = ctx._now"
},
"query": {
"match_all": {}
}
}
当我使用的随机数值,它是工作。假设我将timenow = 5。然后,所有文档字段timenow变为5.但是,使用此ctx方法不起作用。
我该怎么做?
其他信息
这是我的ES信息:
"version" : {
"number" : "5.5.1",
"build_hash" : "19c13d0",
"build_date" : "2017-07-18T20:44:24.823Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
}
我使用ctx._now,因为它是在文件更新工作。下面是的情况下:
{
"script": "ctx._source.timenow2 = ctx._now"
}
实施例:POST索引/类型/ 24/_Update
这里是由弹性文档:
除了_Source,以下变量可通过ctx映射获得:_index,_type,_id,_version,_routing和_now(当前时间戳)。
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html
谢谢
_now
只是更新API,即在打电话时,请在_update
端点,不_update_by_query
。
使用这个代替:
{
"script": {
"inline": "ctx._source.timenow = Instant.now().toEpochMilli()"
},
"query": {
"match_all": {}
}
}
谢谢,这是更快的Instant.now或新的日期().getTime()?我在其他网站上发现了新的Date()。getTime()。 –
最快的是'System.currentTimeMillis()'这是'Instant.now()'在 – Val
下使用的内容嗨,我已经尝试过了,它效果很好。非常感谢你 –
你在哪里看到'ctx._now'?你使用什么版本的ES? – Val
如果所有的timenows都更新为null,这意味着'_now'不是'ctx'上的字段。是什么让你使用'_now'(你在哪里找到关于它的信息)?尝试设置'timenow'值为'Instant.now()'或类似的东西,看看它是如何工作的。 – ryanlutgen
我有更新我的问题添加ctx._now。我如何使用Instant.now()? –