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



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

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?

正确的方法是创建一个新的 ES 插件。此处提供了一个示例 Java 插件。

我会检查标准分析插件是如何构建的,让我们以黑路分析插件为例。如您所见,它通过注册KuromojiTokenizerFactory来注册自己的分词器。

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

现在这就是"魔术"发生的地方。在LCCNTokenizerFactory类中,你将有一个构造函数,如下所示:

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 方法,以便使用之前在工厂构造函数中分析的自定义设置创建自己的分词器的实例。

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

这不是一个完整的示例,但它应该让您继续前进。

最新更新