我正在使用Apache Lucene 6.3,并且需要扩展Analyzer类。在旧版本中,有两个参数传递给createComponent方法,第一个参数指示要为其调用分析器的字段名称,第二个参数代表包含主输入文本的阅读器。
Analyzer analyzer = new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new FooTokenizer(reader);
TokenStream filter = new FooFilter(source);
filter = new BarFilter(filter);
return new TokenStreamComponents(source, filter);
}
};
但是在较新的版本中,仅字段名称作为函数参数给出。
Analyzer analyzer = new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String fieldName) {
Tokenizer source = new FooTokenizer(reader);
TokenStream filter = new FooFilter(source);
filter = new BarFilter(filter);
return new TokenStreamComponents(source, filter);
}
@Override
protected TokenStream normalize(TokenStream in) {
// Assuming FooFilter is about normalization and BarFilter is about
// stemming, only FooFilter should be applied
return new FooFilter(in);
}
};
我的问题是我应该如何访问
analyzer.tokenStream(fieldName,reader)
函数输入中的阅读器来分析输入文本。 最佳答案
您不使用createComponents
方法访问阅读器。在我看来,您已经找到一个文档错误。 createComponents
设置分析链,以准备TokenStreamComponents.setReader
提供的输入。通常,分词器不再将Reader作为构造器参数。
我相信此示例中的令牌生成器不应具有该参数,而应为:
@Override
protected TokenStreamComponents createComponents(String fieldName) {
Tokenizer source = new FooTokenizer();
TokenStream filter = new FooFilter(source);
filter = new BarFilter(filter);
return new TokenStreamComponents(source, filter);
}