我正在编写一个自定义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?
答案 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);
}
这不是一个完整的例子,但它应该让你去。