如何使用Logstash将字符串字段转换为数组

时间:2019-09-06 14:47:03

标签: logstash

如何使用Logstash将字符串字段转换为数组?

我有一个如下字段:

"language" : "english"

我需要将其转换为:

"language" : ["english"]

谢谢。

1 个答案:

答案 0 :(得分:1)

假设您的字段语言已经映射到数据类型(通常是文本/关键字),则转换会在索引时引起问题,因为数组类型不会匹配文本/关键字类型。

请注意,由于dynamic mapping,Elasticsearch将自动为语言字段创建到文本/关键字的映射(假设第一个索引值是类似“ english”的String)即使您没有为该索引设置一个显式映射。

因此,根据您的映射,我建议为该数组创建一个新字段。

您可以使用ruby filter plugin进行此操作,如下所示(尽管未经测试):

filter{
  ruby{
    code => '
      langValue = event.get("language")

      langArray = []
      langArray << langValue

      event.set("name_of_the_new_field", langArray)
    '
  }
}

代码说明:

在第4行中,您将使用language域的值创建一个变量。在您的示例中,这是 english 。有关详细用法,请参阅Event API

在第6行中,您初始化了一个新数组。在下面的行中,将值 english 的变量添加到该数组。请参阅this page以获取有关红宝石阵列的更多信息。

最后,在代码的最后一行中,将事件作为数组的值设置到事件的新字段。请注意,括号中的第一个参数应该是新创建的字段的名称。

希望我能给您一些提示/帮助您解决问题的思路。