我需要使用新字段更新特定類型的現有文檔。該新字段應設置爲文檔中由日期時間字段給出的日期的當地日期名稱。日期時間字段的格式爲yyyy-MM-dd'T'HH:mm:ss,以UTC格式,但沒有明確的時區代碼。Elasticsearch - 獲取Groovy腳本中的語言環境特定日期
我想用Groovy做到這一點,但沒有Java經驗。我猜我需要:
1)在這種情況下
3設置日期時間爲UTC區域
2)轉換爲本地區域設置(設置爲歐洲/倫敦))獲取日期名稱從轉換的日期,並設置新的領域(DAYNAME)值與它
如果我用下面的update_by_query:
POST /myindex/_update_by_query
{
"script": {
"inline": "ctx._source.dayname = Some_function(ctx._source.datetime)"
},
"query": {
"term": {
"_type": "myDocType"
}
}
}
有沒有一種簡單的方法有一些Groovy的本功能來做到這一點離子(取代上面的Some_function)。
任何提示將非常感謝!
更新 - 感謝tim_yates我有以下意義控制檯代碼:
POST /rating/_update_by_query
{
"script": {
"inline": "ctx._source.day = Date.parse(\"yyyy-MM-dd'T'HH:mm:ss\", ctx._source.datetime, java.util.TimeZone.getTimeZone('UTC')).format('EEEE', java.util.TimeZone.getTimeZone('Europe/London'))"
},
"query": {
"term": {
"_type": "transaction"
}
}
}
不幸的是這會產生以下錯誤消息:
{
"error": {
"root_cause": [
{
"type": "script_exception",
"reason": "failed to run inline script [ctx._source.day = Date.parse(\"yyyy-MM-dd'T'HH:mm:ss\", ctx._source.datetime, java.util.TimeZone.getTimeZone('UTC')).format('EEEE', java.util.TimeZone.getTimeZone('Europe/London'))] using lang [groovy]"
}
],
"type": "script_exception",
"reason": "failed to run inline script [ctx._source.day = Date.parse(\"yyyy-MM-dd'T'HH:mm:ss\", ctx._source.datetime, java.util.TimeZone.getTimeZone('UTC')).format('EEEE', java.util.TimeZone.getTimeZone('Europe/London'))] using lang [groovy]",
"caused_by": {
"type": "missing_property_exception",
"reason": "No such property: java for class: 1209ff7fb16beac3a71ff2a276ac2225f7c4505b"
}
},
"status": 500
}
雖然它的工作,如果我刪除參考getTimeZone獲取 - 精確的Sense控制檯代碼如下:
POST /rating/_update_by_query
{
"script": {
"inline": "ctx._source.day = Date.parse(\"yyyy-MM-dd'T'HH:mm:ss\", ctx._source.datetime).format('EEEE')"
},
"query": {
"term": {
"_type": "transaction"
}
}
}
我是n確信爲什麼getTimeZone方法失敗。我試過的,而不是「java.util.TimeZone.getTimeZone」
的Java版本下運行? 1.8? –
從文檔中可以看出它說Java 7更新55或更新 – InTooDeep
是的,所以它可能是Java 7或8 ...有8個比7更容易的方法 –