csv字段的测试值-过滤器-Logstash

Testing value of csv field - Filter - Logstash

我需要设置一个 logstash conf 文件以将导入的 csv 文件导出到弹性搜索。 我的问题是我不知道如何评估 if 语句中的 csv 字段。 我有一个字段 "call_type",我想这样格式化:

 if ["call_type"] == "([a-z][A-Z][ ])*[dD]ata([a-z][A-Z][ ])*"
mutate 
{
 replace => ["call_type", "data" ]
}  }  else if ["call_type"] =~ "([a-z][A-Z][ ])*[vV]oix([a-z][A-Z][ ])*"
{
mutate 
{
replace => ["call_type", "voice" ]
}
}
else if ["call_type"] =~ "([a-z][A-Z][ ])*[sS]ms([a-z][A-Z][ ])*"
{
mutate
{
replace => ["call_type", "sms" ]
}  
}

"call_type" 不知道此 if 语句语法 。 有人知道 if 语句语法 ?

您的代码段有几个拼写错误。如果使用正则表达式如下所示:

if ["call_type"] =~ "([a-z][A-Z][ ])*[sS]ms([a-z][A-Z][ ])*"

如果你这样做:

if ["call_type"] == "([a-z][A-Z][ ])*[dD]ata([a-z][A-Z][ ])*"

你比较的是字符串文字而不是正则表达式。

您缺少第一个 if 的起始引号。 如果你修复了这些,假设你的正则表达式是正确的,它应该可以工作...

感谢您的评论。 我发现了我的错误。它来自那里的双引号:["call_type"].

select if 语句中 csv 字段的值的良好语法是 [call_type]。

 if [call_type] =~ "([a-z][A-Z][ ])*[dD]ata([a-z][A-Z][ ])*"
{
mutate 
{
 replace => ["call_type", "data" ]
}  
}
else if [call_type] =~ "([a-z][A-Z][ ])*[vV]oix([a-z][A-Z][ ])*"
{
mutate 
{
  replace => ["call_type", "voice" ]
}
}
else if [call_type] =~ "([a-z][A-Z][ ])*[sS]ms([a-z][A-Z][ ])*"
{
mutate
{
  replace => ["call_type", "sms" ]
}  
}