如何轻松将 JSON 会员提升至主赛事级别?

How to easily promote a JSON member to the main event level?

我正在使用 http_poller 来访问 API 端点以获得一些我想用 elasticsearch 编制索引的信息。结果在 JSON 中,是一个记录列表,如下所示:

{
  "result": [
     {...},
     {...},
     ...
  ]
}

数组中的每个结果对象都是我真正想要转换成在 ElasticSearch 中建立索引的事件的对象,因此我尝试使用 split 过滤器将对象转换成一系列事件。它工作得相当好,但现在我有一系列的事件看起来像这样:

{ 
  result: { ... }
}

我当前的过滤器如下所示:

filter {
  if [type] == "history" {
    split {
      field => "result"
    }
  }
}

每个结果对象都有大约 20 个字段,其中大部分是我想要的,所以虽然我知道我可以通过按照

的方式做一些事情来转换它们
filter {
      if [type] == "history" {
        split {
          field => "result"
        }
        mutate {
           add_field => { "field1" => "%{[result][field1]}"
           #... x15-20 more fields
           remove_field => "result"
        }
      }
    }

但是有这么多字段,我希望有一个单行代码可以只复制 'result' 值的所有字段作为事件。

这可以通过这样的 ruby 过滤器来完成:

       ruby {
                code => '
                        if (event.get("result"))
                                event.get("result").each { |k,v|
                                        event.set(k,v);
                                }
                                event.remove("result");
                        end
                '
        }

我不知道有什么方法可以使用任何内置的 in/publicly 可用过滤器来做到这一点。