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

标签 sorting elasticsearch mapping reindex

我在Elasticsearch中索引了一些数据,在_source中,我有一个字段来存储文件大小:
{“file_size”:“25.2MB”}
{“file_size”:“2GB”}
{“file_size”:“800KB”}

当前,该字段的映射是字符串。我想搜索按file_size排序。我想我需要将映射更改为整数并重新索引。

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

最佳答案

Elasticsearch不支持字段重新索引,因为lucene索引中的文档是不可变的。因此,在内部,每个文档都需要获取,更改,索引回索引和旧副本。实际所需的内容无关紧要-更改映射或更改数据。

因此,关于实际部分。简单的方法:

  • 使用正确的映射创建新索引
  • 从旧索引
  • 获取所有文档
  • 根据您需要的任何逻辑将file_size字段更改为整数
  • 将文档索引到新索引
  • 完全迁移后删除旧索引

  • 因此,应用程序端将包含其他逻辑,以将数据从人类可读的字符串转换为Long +标准ES驱动程序功能。为了加快此过程,请考虑使用 scroll-scan 进行读取,并使用 bulk api 进行写入。为了将来,我建议使用aliases来无缝迁移数据。

    万一由于某种原因而无法进行服务器端更改时,可以潜在地添加具有正确映射的新字段,并使用scripted partial updates()启动ES端更新。或者尝试用experimental plugin运气好

    关于sorting - 如何将Elasticsearch中的字段值从字符串更改为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29558580/

    相关文章:

    Java:如何按属性对对象列表进行排序和分组

    java - 按每个子列表中的第一个数字排序 List<List<Integer>>

    elasticsearch - elasticsearch中的source filtering、stored fields、doc values有什么区别?

    elasticsearch - Kubernetes - Ec2 - 获得 0/2 个节点的 Elasticsearch 可用 : 2 Insufficient memory

    elasticsearch - Kubernetes Helm Elasticstack CrashLoopBackOff 日志中存在 JavaErrors

    c++ - 基于矩阵引起的排序对 vector 进行排序时出现段错误

    java - 单个字段约 100-150 个对象的最少系统任务排序算法?

    spring-mvc - spring mvc Controller - 缺少名为 'xyz' 的 cookie

    java - Orika 可以映射嵌套集合吗?

    不相关集合的 hibernate 映射问题