如何配置/初始化自定义Elasticsearch Tokenizer

时间:2016-02-23 15:22:39

标签: elasticsearch

我正在编写一个自定义Elasticsearch Tokenizer。该文档仅指定了一个构造函数,用于传递Reader以获取要标记的字符串,以及用于生成标记的incrementToken()方法。我看不到配置tokenizer的选项的迹象。我看到Lucene TokenizerFactories的引用似乎提供了一个配置选项,但是在任何Elasticsearch上下文中都没有看到它们。我的tokenizer是基本Tokenizer类的一个简单扩展:

public class LCCNTokenizer extends Tokenizer {
    private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);

    public LCCNTokenizer(Reader reader) {
    }

    @Override
    public boolean incrementToken() throws IOException {
        return false;
    }
}

如何配置自定义Elasticsearch Tokenizer?

1 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是创建new ES Plugin。示例Java插件是available here

我会检查标准分析插件的构建方式,例如Kuromoji analysis plugin。如您所见,它通过注册KuromojiTokenizerFactory来注册自己的标记器。

所以你还需要为你的tokenizer创建一个工厂,我们称之为LCCNTokenizerFactory,你将在你的插件类中注册它,如上所述。

现在这就是“神奇”发生的地方。在LCCNTokenizerFactory课程中,您将拥有constructor,如下所示:

public LCCNTokenizerFactory(IndexSettings indexSettings, Environment env, String name, Settings settings) {
    param1 = settings.getAsBoolean("param1", true);
    param2 = settings.getAsString("param2", null);
    param3 = settings.getAsDouble("param3", 0.0);
}

在此构造函数中,您现在可以检索所需的任何自定义设置,以便配置您即将创建的标记生成器。

最后,您覆盖onCreate方法,以便使用您之前在工厂构造函数中解析的自定义设置创建自己的tokenizer的实例。

@Override
public Tokenizer create() {
    return new LCCNTokenizer(param1, param2, param3);
}

这不是一个完整的例子,但它应该让你去。