在 Apache Lucene 6.3 中覆盖 Analyzer class 的方法时如何访问在 tokenStream 方法中传递的 reader
How to access the reader passed in the tokenStream method when overriding the methods of an Analyzer class in Apache Lucene 6.3
我正在使用 Apache Lucene 6.3,我需要扩展一个分析器 class。在旧版本中,将两个参数传递给 createComponent 方法,第一个参数表示调用分析器的字段名称,第二个参数表示包含主要输入文本的 reader。
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)
函数输入中的reader来分析输入文本。
您不要访问createComponents
方法中的reader。在我看来,您发现了一个文档错误。 createComponents
设置分析链,为 TokenStreamComponents.setReader
提供的输入做准备。通常,Tokenizers 不再将 Readers 作为构造函数参数。
我相信这个例子中的分词器不应该有那个参数,应该是:
@Override
protected TokenStreamComponents createComponents(String fieldName) {
Tokenizer source = new FooTokenizer();
TokenStream filter = new FooFilter(source);
filter = new BarFilter(filter);
return new TokenStreamComponents(source, filter);
}
我正在使用 Apache Lucene 6.3,我需要扩展一个分析器 class。在旧版本中,将两个参数传递给 createComponent 方法,第一个参数表示调用分析器的字段名称,第二个参数表示包含主要输入文本的 reader。
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)
函数输入中的reader来分析输入文本。
您不要访问createComponents
方法中的reader。在我看来,您发现了一个文档错误。 createComponents
设置分析链,为 TokenStreamComponents.setReader
提供的输入做准备。通常,Tokenizers 不再将 Readers 作为构造函数参数。
我相信这个例子中的分词器不应该有那个参数,应该是:
@Override
protected TokenStreamComponents createComponents(String fieldName) {
Tokenizer source = new FooTokenizer();
TokenStream filter = new FooFilter(source);
filter = new BarFilter(filter);
return new TokenStreamComponents(source, filter);
}