有沒有辦法使用ElasticSearch script_fields的輸出來更新索引中的另一個變量?Elasticsearch script_fields更新另一個字段?
我在ElasticSearch 1.x中有一個索引,它啓用了時間戳,但沒有存儲。 (參見下面的映射)
這意味着該時間戳可以用於搜索使用類似script_fields被訪問,或 -
GET twitter/_search
{
"script_fields": {
"script1": {
"script": "_fields['_timestamp']"
}
}
}
我需要提取該時間戳字段,並將其存儲在索引中。寫一個腳本來複制任何其他字段是很容易的,例如(我用的是更新API)
ctx._source.t1=ctx._source.message
但我怎麼能使用該值從script_fields輸出索引更新另一個領域?我希望字段'tcopy'獲取每個文檔的時間戳值。
此外,我試圖用java來獲取如下的值,但它返回null。
SearchResponse response = client.prepareSearch("twitter")
.setQuery(QueryBuilders.matchAllQuery())
.addScriptField("test", "doc['_timestamp'].value")
.execute().actionGet();
映射
{
"mappings": {
"tweet": {
"_timestamp": {
"enabled": true,
"doc_values" : true
},
"properties": {
"message": {
"type": "string"
},
"user": {
"type": "string"
},
"tcopy": {
"type": "long"
}
}
}
}
}
在腳本字段腳本中使用UpdateRequestBuilder,你不能用'_fields._timestamp'因爲訪問'_timestamp'它不會被存儲,而是使用'doc._timestamp.value'代替。 – Val
但是,腳本更新將不允許您使用'doc._timestamp.value'。 – Val