Elasticsearch修复日期字段值。 (将字段值从int更改为字符串)

时间:2016-09-07 08:15:55

标签: python elasticsearch elasticsearch-query

我使用了从mongodb到elasticsearch的python ship数据。

有一个名为update_time的时间戳字段,映射如下:

    "update_time" : {
        "type": "date",
        "format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
    },

epoch_millis用于时间戳。

完成所有操作后,我使用range查询日期范围内的文档。但没有回报。经过一番研究,我认为问题是:python timestamp int(time.time())是10位数,但在elasticsearch中是13位数,official example

  

PUT my_index / my_type / 2?timestamp = 1420070400000。

所以我尝试用update 1000更新update_time字段:

{
  "script": {
    "inline": "ctx._source.update_time=ctx._source.update_time*1000"
  }
}

不幸的是,我发现所有update_time都变为负数。然后我想出Java int类型是pow(2,32) -1,远低于1420070400000。所以我猜时间戳字段不应该是int?

然后我想将字段值从int更新为字符串(我不想更改字段映射类型,我知道更改映射类型需要reindex,但这里只需要更改值)

但是我无法弄清楚我可以使用什么脚本,官方脚本文件没有提及这个

1 个答案:

答案 0 :(得分:0)

我不知道groovy是一个lauguage并认为它只用于数学方法,因为ES doc只写了这个。

闷热很简单,只需将int转换为long。

curl -XPOST http://localhost:9200/my_index/_update_by_query -d '
{
  "script": {
    "inline": "ctx._source.update_time=(long)ctx._source.update_time*1000"
  }
}'