我在elasticsearch中索引了一些数据,在_source中我有一个存储文件大小的字段:{“file_size”:“25.2MB”} {“file_size”:“2GB”} {“file_size”:“800KB”}
目前该字段的映射是字符串。我想通过 file_size 排序进行搜索。我想我需要将映射更改为整数并重新索引。
如何计算字节大小并将它们重新索引为整数?
我在elasticsearch中索引了一些数据,在_source中我有一个存储文件大小的字段:{“file_size”:“25.2MB”} {“file_size”:“2GB”} {“file_size”:“800KB”}
目前该字段的映射是字符串。我想通过 file_size 排序进行搜索。我想我需要将映射更改为整数并重新索引。
如何计算字节大小并将它们重新索引为整数?
Elasticsearch 不支持字段重新索引,因为lucene
s 索引中的文档是不可变的。因此,在内部,每个文档都需要被获取、更改、索引回索引,并且应该删除旧副本。您实际需要什么并不重要 - 更改映射或更改数据。
所以,关于实际部分。直截了当的方法:
file_size
根据您需要的任何逻辑将您的字段更改为整数因此,应用程序端将包含额外的逻辑来将数据从人类可读的字符串转换为Long
+ 标准 ES 驱动程序功能。要加快此过程,请考虑使用scroll-scan
for read 和bulk api
for write。对于未来,我建议使用别名来无缝迁移您的数据。
如果由于某种原因无法进行服务器端更改,您可以添加具有适当映射的新字段,并使用脚本部分更新() 启动 ES 端更新。或者用实验性插件试试你的运气
为什么不使用按关键字排序?
只需添加以下内容:
{
"sort": {
"file_size.keyword": {
"order": "asc"
}
}
}
只是按字符串排序,所以如果有数据2.5GB,1KB,5KB,数据将是1KB,2.5GB,5KB
我认为您必须先将其保存到 Byte 中,因此如果格式相同,您可以轻松对其进行排序。