如何使用 Logstash 将字符串字段转换为数组
How to convert a string field to array using Logstash
如何使用 Logstash 将字符串字段转换为数组?
我有如下字段:
"language" : "english"
我需要将其转换为:
"language" : ["english"]
提前致谢。
假设您的字段 language 已经映射到数据类型(通常是 text/keyword),converting 会导致索引时出现问题,因为数组类型与 text/keyword 类型不匹配。
请注意,由于 dynamic mapping,Elasticsearch 将自动为语言字段创建到 text/keyword 的映射(假设第一个索引值是一个字符串,如 "english")即使您没有为该索引设置显式映射。
因此,根据您的映射,我建议为该数组创建一个新字段。
您可以像下面这样使用 ruby filter plugin 来做到这一点(虽然未经测试):
filter{
ruby{
code => '
langValue = event.get("language")
langArray = []
langArray << langValue
event.set("name_of_the_new_field", langArray)
'
}
}
代码解释:
在第 4 行中,您使用语言字段的值创建了一个变量。在您的示例中,这将是 english。详细用法请参考Event API
在第 6 行中,您初始化了一个新数组。在下一行中,您将值为 english 的变量添加到该数组。请参阅 this page 以获取有关 ruby 数组的更多信息。
最后,在最后一行代码中,您为事件设置了一个新字段,并将数组作为其值。请注意,括号中的第一个参数应该是新创建的字段的名称。
我希望我能给你一些hints/food的想法来解决你的问题。
如何使用 Logstash 将字符串字段转换为数组?
我有如下字段:
"language" : "english"
我需要将其转换为:
"language" : ["english"]
提前致谢。
假设您的字段 language 已经映射到数据类型(通常是 text/keyword),converting 会导致索引时出现问题,因为数组类型与 text/keyword 类型不匹配。
请注意,由于 dynamic mapping,Elasticsearch 将自动为语言字段创建到 text/keyword 的映射(假设第一个索引值是一个字符串,如 "english")即使您没有为该索引设置显式映射。
因此,根据您的映射,我建议为该数组创建一个新字段。
您可以像下面这样使用 ruby filter plugin 来做到这一点(虽然未经测试):
filter{
ruby{
code => '
langValue = event.get("language")
langArray = []
langArray << langValue
event.set("name_of_the_new_field", langArray)
'
}
}
代码解释:
在第 4 行中,您使用语言字段的值创建了一个变量。在您的示例中,这将是 english。详细用法请参考Event API
在第 6 行中,您初始化了一个新数组。在下一行中,您将值为 english 的变量添加到该数组。请参阅 this page 以获取有关 ruby 数组的更多信息。
最后,在最后一行代码中,您为事件设置了一个新字段,并将数组作为其值。请注意,括号中的第一个参数应该是新创建的字段的名称。
我希望我能给你一些hints/food的想法来解决你的问题。