elasticsearch - 重复 grok 模式

标签 elasticsearch nest logstash-grok grok

我有一条这样的消息“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/

相关文章:

c# - 在 ElasticSearch 5.5 中使用摄取插件时如何获取术语向量?

json - 将JSON文件解析为logstash

elasticsearch - Logstash(使用正则表达式的字段的一部分)

elasticsearch - 带Java堆栈跟踪的logstash多行编解码器

java - 在ElasticSearch 7.4 java客户端中的geoShapeQuery中使用geojson多边形

c# - 搜索多个索引并返回正确的类型

Elasticsearch NEST - 过滤多层嵌套类型

elasticsearch - 字段查询和术语查询或匹配查询之间的差异

java - ElasticSearch 开销超过 Lucene + 自定义集群解决方案

elasticsearch - elasticsearch match_phrase查询精确的子字符串搜索