如何让logstash将来自一个字段的所有单词作为数组存储在另一个字段中

时间:2016-10-12 19:22:12

标签: logstash

我正在努力使用Logstash中的过滤器。

我正在尝试采用结构良好的json流(我正在使用twitter feed来测试数据)并增加数据。我们的一个需求是获取现有字段,例如消息,并存储所有唯一标记(在本例中为简单空格分隔的单词)。

从长远来看,我们希望能够使用弹性搜索分析器将消息分解为规范化的块(使用词干,停用词,降低等等)。

期望的目标是采取以下措施: {     “@timestamp”: “2016-10-12T19:01:33.000Z”     “消息”:“最快的布朗狐狸”,     ... }

得到类似的东西: {     “@timestamp”: “2016-10-12T19:01:33.000Z”     “消息”:“最快的布朗狐狸”,     “令牌”:[“The”,“quickest”,“Brown”,“fox”],     ... }

最终是这样的: {     “@timestamp”: “2016-10-12T19:01:33.000Z”     “消息”:“最快的布朗狐狸”,     “令牌”:[“快”,“棕”,“狐狸”],     ... }

我觉得我正撞在墙上。任何帮助我指向正确方向的人都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

使用mutate过滤器可以轻松完成:

   mutate {
         split => {"message" => " "}
    }

这告诉LS使用散列中指定的分隔符来分割用“message”表示的字段,在本例中为空格。

测试:

artur@pandaadb:~/dev/logstash$ ./logstash-2.3.2/bin/logstash -f conf2/
Settings: Default pipeline workers: 8
Pipeline main started
The quickest Brown Fox
{
       "message" => [
        [0] "The",
        [1] "quickest",
        [2] "Brown",
        [3] "Fox"
    ],
      "@version" => "1",
    "@timestamp" => "2016-10-13T13:46:20.509Z",
          "host" => "pandaadb"
}

结果是消息字段是元素数组。

或者,您也可以在分割之前将消息字段复制到标记字段中。它需要分两步才能完成,例如将其写入标记字段:

 mutate {
         add_field => {"tokens" => "%{message}" }
    }

    mutate {
        split => { "tokens" => " "}
    }

第一个mutate添加一个名为token的新字段,其中包含message字段的内容,而第二个mutit则按空格分隔token字段。

希望有所帮助,

Artur