Elasticsearch 修复日期字段值。 (将字段值从 int 更改为 string)
Elasticsearch fix date field value. (change field value from int to string)
我使用 python 将数据从 mongodb 发送到 elasticsearch。
有一个名为 update_time
的时间戳字段,映射如下:
"update_time" : {
"type": "date",
"format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
epoch_millis
用于时间戳。
完成所有操作后,我使用 range
查询日期范围内的文档。但是什么都没有return。经过一番研究,我认为问题是: python timestamp int(time.time())
是 10 位,但在 elasticsearch 中是 13 位,official example :
PUT my_index/my_type/2?timestamp=1420070400000.
所以我尝试将 update_time 字段更新为 1000 倍:
{
"script": {
"inline": "ctx._source.update_time=ctx._source.update_time*1000"
}
}
不幸的是,我发现所有update_time
都变成了负号。然后我想出 Java int 类型是 pow(2,32) -1
,比 1420070400000
低得多。所以我猜时间戳字段不应该是 int ?
然后我想更新字段值从int到string(我不想改变字段映射类型,我知道改变映射类型需要重新索引,但这里只需要改变值)
但是我不知道可以用什么脚本,官方脚本文档没有提到这个
我不知道 groovy 是一种语言,并认为它只用于数学方法,因为 ES 文档只写了关于它的内容。
解决方法很简单,把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"
}
}'
我使用 python 将数据从 mongodb 发送到 elasticsearch。
有一个名为 update_time
的时间戳字段,映射如下:
"update_time" : {
"type": "date",
"format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
epoch_millis
用于时间戳。
完成所有操作后,我使用 range
查询日期范围内的文档。但是什么都没有return。经过一番研究,我认为问题是: python timestamp int(time.time())
是 10 位,但在 elasticsearch 中是 13 位,official example :
PUT my_index/my_type/2?timestamp=1420070400000.
所以我尝试将 update_time 字段更新为 1000 倍:
{
"script": {
"inline": "ctx._source.update_time=ctx._source.update_time*1000"
}
}
不幸的是,我发现所有update_time
都变成了负号。然后我想出 Java int 类型是 pow(2,32) -1
,比 1420070400000
低得多。所以我猜时间戳字段不应该是 int ?
然后我想更新字段值从int到string(我不想改变字段映射类型,我知道改变映射类型需要重新索引,但这里只需要改变值)
但是我不知道可以用什么脚本,官方脚本文档没有提到这个
我不知道 groovy 是一种语言,并认为它只用于数学方法,因为 ES 文档只写了关于它的内容。
解决方法很简单,把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"
}
}'