elasticsearch,substring,logstash,Csv,Filter,elasticsearch,Substring,Logstash" /> elasticsearch,substring,logstash,Csv,Filter,elasticsearch,Substring,Logstash" />

Logstash-来自CSV列的子字符串

Logstash-来自CSV列的子字符串,csv,filter,elasticsearch,substring,logstash,Csv,Filter,elasticsearch,Substring,Logstash,我想将许多信息从CSV文件导入弹性搜索。 我的问题是我不知道如何使用等效的子字符串将信息选择到CSV列中 在我的例子中,我有一个字段日期(YYYYMMDD),我希望有一个字段日期(YYYY-MM-DD) 我使用过滤、变异、gsub等: filter { mutate { gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789

我想将许多信息从CSV文件导入弹性搜索。 我的问题是我不知道如何使用等效的子字符串将信息选择到CSV列中

在我的例子中,我有一个字段日期(YYYYMMDD),我希望有一个字段日期(YYYY-MM-DD)

我使用过滤、变异、gsub等:

filter 
{
  mutate 
  {
    gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]", "[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]"]
  }
}
但我的结果是错误的。 我可以识别我的字符串,但我不知道如何提取其中的一部分

我的目标是有这样的东西:

gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]","%{date}(0..3}-%{date}(4..5)-%{date}"(6..7)]

%{date}(0..3}:从csv列date的第一个到第四个字符中选择date

您可以使用
ruby
插件进行转换。正如您所说,您将有一个
date
字段。因此,我们可以在
ruby
中直接使用它

filter {
    ruby {
        code => "
                date = Time.strptime(event['date'],'%Y%m%d')
                event['date_new'] = date.strftime('%Y-%m-%d')
        "
    }
}

date\u new
字段是您想要的格式。

您可以使用
ruby
插件进行转换。正如您所说,您将有一个
date
字段。因此,我们可以在
ruby
中直接使用它

filter {
    ruby {
        code => "
                date = Time.strptime(event['date'],'%Y%m%d')
                event['date_new'] = date.strftime('%Y-%m-%d')
        "
    }
}

date\u new
字段是您想要的格式。

您可以使用
ruby
插件进行转换。正如您所说,您将有一个
date
字段。因此,我们可以在
ruby
中直接使用它

filter {
    ruby {
        code => "
                date = Time.strptime(event['date'],'%Y%m%d')
                event['date_new'] = date.strftime('%Y-%m-%d')
        "
    }
}

date\u new
字段是您想要的格式。

您可以使用
ruby
插件进行转换。正如您所说,您将有一个
date
字段。因此,我们可以在
ruby
中直接使用它

filter {
    ruby {
        code => "
                date = Time.strptime(event['date'],'%Y%m%d')
                event['date_new'] = date.strftime('%Y-%m-%d')
        "
    }
}

date\u new
字段是您想要的格式。

首先,您可以使用regexp范围来匹配序列,而不是[0123456789],您可以执行[0-9]。如果您知道将有4个数字,您可以执行[0-9]{4}

其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:

([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:

\1-\2-\3
\1是第一个捕获组,等等


当你做GROK {}时,你也可以考虑得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。

< P>首先,你可以使用一个ReGEXP范围来匹配一个序列,而不是[0123456789 ],你可以[0-9]。如果你知道有4个数字,你可以[09] { 4 }。 其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:

([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:

\1-\2-\3
\1是第一个捕获组,等等


当你做GROK {}时,你也可以考虑得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。

< P>首先,你可以使用一个ReGEXP范围来匹配一个序列,而不是[0123456789 ],你可以[0-9]。如果你知道有4个数字,你可以[09] { 4 }。 其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:

([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:

\1-\2-\3
\1是第一个捕获组,等等


当你做GROK {}时,你也可以考虑得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。

< P>首先,你可以使用一个ReGEXP范围来匹配一个序列,而不是[0123456789 ],你可以[0-9]。如果你知道有4个数字,你可以[09] { 4 }。 其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:

([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:

\1-\2-\3
\1是第一个捕获组,等等

你也可以考虑在你做GROK{}时得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。