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

问题描述 投票:0回答:2

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

我有一个如下所示的字段:

"language" : "english"

我需要将其转换为:

"language" : ["english"]

提前致谢。

logstash
2个回答
1
投票

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

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

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

您可以使用 ruby 过滤器插件 来完成此操作,如下所示(尽管未经测试):

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

      langArray = []
      langArray << langValue

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

代码解释:

在第 4 行中,您使用语言字段的值创建一个变量。在您的示例中,这将是 english。详细使用请参考Event API

在第 6 行中,初始化一个新数组。在下面的行中,将值为 english 的变量添加到该数组中。请参阅此页面以获取有关 ruby 数组的更多信息。

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

我希望能给您一些提示/思考来解决您的问题。


0
投票

另一种选择是使用 mutate-split 过滤器插件,如下所示:

mutate {
    split => { "[language]" => "," }
}

注意:您应该使用原始字符串中从未包含的分隔符才能正确转换。

© www.soinside.com 2019 - 2024. All rights reserved.