如何使用Logstash将字符串字段转换为数组?
我有一个如下字段:
"language" : "english"
我需要将其转换为:
"language" : ["english"]
谢谢。
答案 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以获取有关红宝石阵列的更多信息。
最后,在代码的最后一行中,将事件作为数组的值设置到事件的新字段。请注意,括号中的第一个参数应该是新创建的字段的名称。
希望我能给您一些提示/帮助您解决问题的思路。