在Elasticsearch

时间:2017-01-09 09:03:29

标签: elasticsearch

我在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条目仍为字符串,即使其_typenew_mapping

我在这里做错了什么?或者根本没有办法将字符串转换为Elasticsearch中的浮点数?

1 个答案:

答案 0 :(得分:1)

新索引中的duration字段将被索引为float(根据您的映射),但是如果源文档中的duration字段仍然是字符串,它将保留为_source中的字符串,但仍然被索引为浮动。

您可以从1.00到3.00"进行范围查询"在新索引上,并与旧索引中的内容进行比较。由于旧索引将运行词法范围(因为字符串类型),您可能会得到持续时间为22.3的结果,而在新索引中,您只能获得真正介于1.00和3.00之间的持续时间。