我正在使用apache Lucene 6.2.0,我正在尝试实现自定义分析器进行搜索。 这是我的分析器类
public static class myAnalyzer extends Analyzer
{
@Override
protected TokenStreamComponents createComponents(String reader) {
final StandardTokenizer tok = new StandardTokenizer();
TokenStream result = new StandardFilter((TokenStream) tok);
result = new LowerCaseFilter(result);
return new TokenStreamComponents(tok, result);
}
}
现在,当我搜索索引时,它正在给我这样的非法状态异常。
Exception in thread "main" java.lang.IllegalStateException: TokenStream contract violation: reset()/close() call missing, reset() called multiple times, or subclass does not call super.reset(). Please see Javadocs of TokenStream class for more information about the correct consuming workflow.
at org.apache.lucene.analysis.Tokenizer$1.read(Tokenizer.java:109)
i tried using result.close(); but it didnt solved the problem..
so what am i doing wrong ? am I using two instances of the same analyzer.
任何代码示例都非常有用。
答案 0 :(得分:2)
createComponents
不再使用Reader参数,因此不会调用该方法。实际调用的方法实际上是覆盖Analyzer
中的方法,在您的实现中,它只是一个返回null的存根。
请删除createComponents(string, Reader)
,然后将代码放入createComponents(string)
(当然,删除对Tokenizer.setReader
的调用)。