我有一条这样的消息“Something word word 20/07/2018 word word 25/04/2015”。我如何使用 grok 模式或客户模式来获取所有日期并将它们添加到新字段中是一个数组吗?
我尝试使用自定义正则表达式模式,但是当我指定全局标志时,ES 无法识别“/g”标志。问题是我不知道文档中将包含多少个日期,因为发票是或其他类型的文档,其中包含大量日期/数字。
最佳答案
既然您在评论部分中声明您可以自由实现,我将使用 Logstashs ruby 过滤器并在本文的帮助下解决此问题:
https://zzamboni.org/post/capturing-multiple-matches-in-ruby/
(很抱歉没有格式化链接,但我现在正在使用手机。)
本文介绍了如何将字符串与正则表达式进行匹配并将所有找到的值存储在数组中。
所以过滤器看起来像这样(未经测试):
filter{
ruby{
code => '
my_string = event.get("my_field")
my_array = my_string.scan(/[0-9]+\/[0-9]+\/[0-9]+/)
event.set("my_array_field_name", my_array)
'
}
}
通过摆弄这个骨架,你应该能够解决这个问题。另请查看文档。
关于elasticsearch - 重复 grok 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991009/