使用CTX查询Elasticsearch更新

问题描述:

我想更新索引内的所有文档。我发现Update Query是我们应该使用的方法。但是,当我将ctx._now用作更新文档字段的值时,我遇到了问题,导致字段值为空。使用CTX查询Elasticsearch更新

这是样板:

{ 
 
    "script": { 
 
    "inline": "ctx._source.timenow = ctx._now" 
 
    }, 
 
    "query": { 
 
    "match_all": {} 
 
    } 
 
}

timenow evidence

当我使用的随机数值,它是工作。假设我将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

谢谢

+0

你在哪里看到'ctx._now'?你使用什么版本的ES? – Val

+0

如果所有的timenows都更新为null,这意味着'_now'不是'ctx'上的字段。是什么让你使用'_now'(你在哪里找到关于它的信息)?尝试设置'timenow'值为'Instant.now()'或类似的东西,看看它是如何工作的。 – ryanlutgen

+0

我有更新我的问题添加ctx._now。我如何使用Instant.now()? –

_now只是更新API,即在打电话时,请在_update端点,不_update_by_query

使用这个代替:

{ 
    "script": { 
    "inline": "ctx._source.timenow = Instant.now().toEpochMilli()" 
    }, 
    "query": { 
    "match_all": {} 
    } 
} 
+0

谢谢,这是更快的Instant.now或新的日期().getTime()?我在其他网站上发现了新的Date()。getTime()。 –

+0

最快的是'System.currentTimeMillis()'这是'Instant.now()'在 – Val

+0

下使用的内容嗨,我已经尝试过了,它效果很好。非常感谢你 –