我想在现有索引loctype
中添加新字段ymetrics
,以便新字段具有现有字段location
的值,如下所示。
ctx._source.location.substring(0, ctx._source.location.indexOf(1,\"/\"))"
我在下面尝试过,但似乎完全不同的解释并添加了一个id为#34; _update"
的新记录POST /ymetrics/request/_update
{
"script": "ctx._source.loctype = ctx._source.location.substring(0, ctx._source.location.indexOf(1,\"/\"))"
}
如何添加新的field
,以使用新字段值更新所有现有documents
。而且每当添加新文档时,这个新字段将具有来自上面expression
派生的其他字段的值?
这背后的原因是我无法更改创建document
的第三方库,也不能在从源插入时更改现有field
的值。所以我需要这个新的field
根据我的需要放置一些图表。
我使用的是elasticsearch 2.x版本,因此script field
不会采用除number
之外的任何其他类型。
使用_update_by_query
后,抛出解析异常。
查询:
POST /ymetrics/_update_by_query
{
"script": "ctx._source.loctype = doc['resource'].substring(0, doc['location'].indexOf(1,'/'))"
"query": {
"match_all": {}
}
}
错误:
{
"error": {
"root_cause": [
{
"type": "parse_exception",
"reason": "Failed to parse content to map"
}
],
"type": "parse_exception",
"reason": "Failed to parse content to map",
"caused_by": {
"type": "json_parse_exception",
"reason": "Unexpected character ('\"' (code 34)): was expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty.ChannelBufferStreamInput@34ceed6e; line: 3, column: 4]"
}
},
"status": 400
}