如何将elasticsearch中的字段值从字符串更改为整数?
How to change field value in elasticsearch from string to integer?
我在 elasticsearch 中索引了一些数据,在 _source 中我有一个字段来存储文件大小:
{"file_size":"25.2MB"}
{"file_size":"2GB"}
{"file_size":"800KB"}
目前该字段的映射为字符串。我想通过 file_size 排序进行搜索。我想我需要将映射更改为整数并重新索引。
如何计算字节大小并将它们重新索引为整数?
Elasticsearch 不支持字段重新索引,因为 lucene
索引中的文档是不可变的。因此,在内部,每个文档都需要被获取、更改、索引回索引,并且旧副本应该被删除。您实际需要什么并不重要 - 更改映射或更改数据。
所以,关于实践部分。直截了当的方式:
- 使用适当的映射创建新索引
- 从旧索引中获取所有文档
- 根据您需要的任何逻辑将
file_size
字段更改为整数
- 将文档索引到新索引
- 完全迁移后删除旧索引
因此,应用程序端将包含额外的逻辑,将数据从人类可读的字符串转换为 Long
+ 标准 ES 驱动程序功能。要加快此过程,请考虑使用 scroll-scan
for read and bulk api
for write. For future, I recommend using aliases 来无缝迁移您的数据。
万一由于某种原因您无法进行服务器端更改,您可以添加具有适当映射的新字段并使用 scripted partial updates (). Or try your luck with experimental plugin
启动 ES 端更新
为什么不使用关键字排序?
只需添加:
{
"sort": {
"file_size.keyword": {
"order": "asc"
}
}
}
只是按字符串排序,所以如果有数据2.5GB、1KB、5KB,则数据为1KB、2.5GB、5KB
我认为你必须先将它保存到 Byte 中,这样如果格式相同,你可以轻松地对其进行排序。
我在 elasticsearch 中索引了一些数据,在 _source 中我有一个字段来存储文件大小: {"file_size":"25.2MB"} {"file_size":"2GB"} {"file_size":"800KB"}
目前该字段的映射为字符串。我想通过 file_size 排序进行搜索。我想我需要将映射更改为整数并重新索引。
如何计算字节大小并将它们重新索引为整数?
Elasticsearch 不支持字段重新索引,因为 lucene
索引中的文档是不可变的。因此,在内部,每个文档都需要被获取、更改、索引回索引,并且旧副本应该被删除。您实际需要什么并不重要 - 更改映射或更改数据。
所以,关于实践部分。直截了当的方式:
- 使用适当的映射创建新索引
- 从旧索引中获取所有文档
- 根据您需要的任何逻辑将
file_size
字段更改为整数 - 将文档索引到新索引
- 完全迁移后删除旧索引
因此,应用程序端将包含额外的逻辑,将数据从人类可读的字符串转换为 Long
+ 标准 ES 驱动程序功能。要加快此过程,请考虑使用 scroll-scan
for read and bulk api
for write. For future, I recommend using aliases 来无缝迁移您的数据。
万一由于某种原因您无法进行服务器端更改,您可以添加具有适当映射的新字段并使用 scripted partial updates (). Or try your luck with experimental plugin
启动 ES 端更新为什么不使用关键字排序?
只需添加:
{
"sort": {
"file_size.keyword": {
"order": "asc"
}
}
}
只是按字符串排序,所以如果有数据2.5GB、1KB、5KB,则数据为1KB、2.5GB、5KB
我认为你必须先将它保存到 Byte 中,这样如果格式相同,你可以轻松地对其进行排序。