【问题标题】:How can I change fields type on elasticsearch without stop my services?如何在不停止服务的情况下更改弹性搜索上的字段类型?
【发布时间】:2016-12-18 17:47:33
【问题描述】:

这两天在google上搜索,在www.elastic.co上找资料,还是很疑惑,下面是我的实际情况:

我上个月学习并设置了ELK服务。我通过logstash将我的日志导入到elasticsearch。

但是我在制作可视化图表时遇到了问题,我需要对一个字段进行求和,但是我得到了错误:

this field type is string,need number to sum! 

计算总和需要一个数字,这是有道理的,所以我尝试将字段类型从字符串更改为数字(长)。

我做到了,这是我的解决方案:

  1. 将模板发布到 elasticsearch 并创建新索引
  2. 将 logstash 输出设置为新索引并重新启动它
  3. 将旧索引重新索引到新索引
  4. 删除旧索引

这是我的问题:

我可以跳过第二步吗?

我不想重启logstash,因为它实时接收数据,我不希望它丢失一些数据。

如果我不重新启动logstash,我无法将输出更改为新索引。

这让我很困惑。

【问题讨论】:

    标签: elasticsearch logstash kibana elastic-stack


    【解决方案1】:

    字段类型一旦设置,就无法更改。

    根据official guide

    虽然您可以添加到现有映射,但不能更改现有映射 字段映射。如果字段的映射已存在,则数据来自 该字段可能已被索引。如果您要更改字段 映射,索引数据将是错误的,不会正确 可搜索。

    因此,您唯一的选择是重新索引整个索引。 好消息是零停机时间是可能的。该过程在here 进行了解释。它是通过使用别名来实现的,索引发生了变化,但两者都指向同一个别名,我猜包括 Logstash,在这种情况下你不需要重新启动它。

    无论如何,如果可能的话,最好预先为每个字段设置正确的类型的映射。如果你事先不知道它们,也许可以做一个更准确的模板。即使停机时间为零,重新索引整个索引也可能会有点慢,具体取决于索引大小。

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      相关资源
      最近更新 更多