我正在努力使用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” “消息”:“最快的布朗狐狸”, “令牌”:[“快”,“棕”,“狐狸”], ... }
我觉得我正撞在墙上。任何帮助我指向正确方向的人都将不胜感激。
由于
答案 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