我已经开始编写自己的 Logstash-filter,基于 Github 上提供的示例过滤器:
我的新过滤器从名为Classficiation.jar
. 我想获取来自text
并基于它的值,对这些文本进行分类。这将需要创建一个新字段并在其中添加分类。
该操作应导致以下结果:
输入
{"text" : "This is a happy thought :)"}
输出
{"text" : "This is a happy thought :)", "classification" : "Positive"}
但是......我不确定我应该如何创建这个新领域。如您所见,该类采用一个参数,即文本。
我非常感谢有关如何为此 logstash 过滤器的输出创建新字段的指导。
# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"
require 'java'
require 'Classficiation.jar'
import 'classficiation.Classficiation'
class LogStash::Filters::Classify < LogStash::Filters::Base
# This is how to configure this filter from Logstash config.
#
# filter {
# classify {
# }
# }
#
config_name "classify"
t = Java::classficiation::Classficiation.new
result = t.Classify(:text)
# This should return a classification for the text, either positive
# or negative
public
def register
end
public
def filter(event)
..........
filter_matched(event)
end
end
谢谢你。
更新
我已按照@hurb 提供给我的说明进行操作,并编辑了我的文件,使其看起来像这样:
# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"
require 'java'
require 'Classficiation.jar'
import 'classficiation.Classficiation'
class LogStash::Filters::Classify < LogStash::Filters::Base
config_name "classify"
t = Java::classficiation::Classficiation.new
public
def register
end
public
def filter(event)
event["result"] = t.Classify(event["text"])
filter_matched(event)
end
end
但是,这开始给我错误:
NameError: undefined local variable or method 'Classify' for #<LogStash::Filters::Classify:0x44850d11>
当我尝试包含t = Java::classficiation::Classficiation.new
在 中时filter
,它给了我错误:
dynamic constant assignment
这是为什么???