如何将elasticsearch中的字段值从字符串更改为整数?

时间:2015-04-10 10:01:34

标签: sorting elasticsearch mapping reindex

我在elasticsearch中有一些索引数据,在_source中我有一个存储文件大小的字段:     {" FILE_SIZE":" 25.2MB"}     {" FILE_SIZE":" 2GB"}     {" FILE_SIZE":" 800KB"}

目前该字段的映射是字符串。我想通过file_size进行排序搜索。我想我需要将映射更改为整数并进行重新索引。

如何计算字节大小并将它们重新索引为整数?

2 个答案:

答案 0 :(得分:0)

Elasticsearch不支持字段重建索引,因为lucene索引中的文档是不可变的。因此,在内部,每个文档都需要被提取,更改,索引回索引,并且应删除旧副本。它与您实际需要的无关 - 更改映射或更改数据。

所以,关于实际部分。直截了当的方式:

  1. 使用正确的映射创建新索引
  2. 从旧索引中获取所有文档
  3. 根据您需要的任何逻辑将您的file_size字段更改为整数
  4. 将文档索引到新索引
  5. 完全迁移后删除旧索引
  6. 因此,应用程序端将包含额外的逻辑,用于将数据从人类可读的字符串转换为Long +标准ES驱动程序功能。要加快此过程,请考虑使用scroll-scan进行读取,使用bulk api进行写入。对于将来,我建议使用aliases无缝迁移数据。

    如果由于某种原因无法进行服务器端更改,则可以使用正确的映射添加新字段,并使用scripted partial updates()启动ES端更新。或者试试experimental plugin

    的运气

答案 1 :(得分:0)

为什么不使用按关键字排序?

只需添加:

{
    "sort": {
        "file_size.keyword": {
            "order": "asc"
        }
    }
}

它只是按字符串排序,所以如果有2.5GB,1KB,5KB的数据,数据将是1KB,2.5GB,5KB

我认为你必须先将它保存到字节中,这样如果它的格式相同,你就可以很容易地对它进行排序。