【问题标题】:How to get logstash to store all of the words from one field as an array in another field如何让logstash将一个字段中的所有单词存储为另一个字段中的数组
【发布时间】:2016-10-12 19:22:11
【问题描述】:

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

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

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

理想的目标是采取以下措施: { "@timestamp":"2016-10-12T19:01:33.000Z", "message":"最快的棕狐", ... }

并得到类似的东西: { "@timestamp":"2016-10-12T19:01:33.000Z", "message":"最快的棕狐", "tokens":["The", "quickest", "Brown", "fox"], ... }

最终像这样: { "@timestamp":"2016-10-12T19:01:33.000Z", "message":"最快的棕狐", “代币”:[“快速”,“棕色”,“狐狸”], ... }

我觉得我的头撞到了墙上。任何为我指明正确方向的帮助将不胜感激。

谢谢

【问题讨论】:

  • 令牌数组正是当您要求 ES 分析您的 message 字段时生成、索引和存储的。我不太明白为什么你需要用这些标记创建一个新字段?请详细说明。

标签: logstash


【解决方案1】:

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

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

这告诉 LS 使用散列中分配的分隔符(在本例中为空格)拆分用“消息”表示的字段。

测试:

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 的新字段,其中包含消息字段的内容,而第二个则将 token 字段按空格分割。

希望对你有帮助,

阿图尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多