我在Elasticsearch索引中有一个映射,其中包含一个名为duration
的字符串字段。但是,duration
实际上是一个浮点数,但它是从我的配置链中作为字符串传入的,所以它总是看起来像这样:"0.12"
。所以现在我想创建一个带有新映射的新索引,其中duration
字段是一个浮点数。这就是我所做的,对于旧条目或新条目都不起作用。
首先,我通过执行以下操作,使用新映射创建新索引:
PUT new_index
{
"mappings": { "new_mapping": {"properties": {"duration": {"type": "float"}, ... }
}
然后我使用以下方法检查新映射是否正确:
GET new_index/_mapping
然后我将旧索引的内容复制到新索引中:
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
但是,当我查看new_index
中的条目时,无论是我最后POST
添加的条目,还是自我的配置链以来进入的新条目, duration
条目仍为字符串,即使其_type
为new_mapping
。
我在这里做错了什么?或者根本没有办法将字符串转换为Elasticsearch中的浮点数?
答案 0 :(得分:1)
新索引中的duration字段将被索引为float(根据您的映射),但是如果源文档中的duration字段仍然是字符串,它将保留为_source
中的字符串,但仍然被索引为浮动。
您可以从1.00到3.00"进行范围查询"在新索引上,并与旧索引中的内容进行比较。由于旧索引将运行词法范围(因为字符串类型),您可能会得到持续时间为22.3的结果,而在新索引中,您只能获得真正介于1.00和3.00之间的持续时间。