如何使用 Logstash 将字符串字段转换为数组?
我有一个如下所示的字段:
"language" : "english"
我需要将其转换为:
"language" : ["english"]
提前致谢。
假设您的字段语言已经映射到数据类型(通常是文本/关键字),转换会在索引时导致问题,因为数组类型与文本/关键字类型不匹配。
请注意,由于动态映射,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 数组的更多信息。
最后在代码的最后一行中,您为事件设置了一个新字段,并将数组作为其值。请注意,括号中的第一个参数应该是新创建的字段的名称。
我希望能给您一些提示/思考来解决您的问题。
另一种选择是使用 mutate-split 过滤器插件,如下所示:
mutate {
split => { "[language]" => "," }
}
注意:您应该使用原始字符串中从未包含的分隔符才能正确转换。