(1)java.lang.NoSuchFieldError: CONSTANT_SCORE_REWRITE
at org.apache.lucene.queryparser.classic.QueryParserBase.<init>(QueryParserBase.java:68)
at org.apache.lucene.queryparser.classic.QueryParser.<init>(QueryParser.java:520)
at org.apache.lucene.queryparser.classic.QueryParser.<init>(QueryParser.java:90)
at com.winfield.HelloLucene.searcher(HelloLucene.java:99)
at com.winfield.test.TestLucene.TestSearch(TestLucene.java:22)
at org.apache.lucene.queryparser.classic.QueryParserBase.<init>(QueryParserBase.java:68)
at org.apache.lucene.queryparser.classic.QueryParser.<init>(QueryParser.java:520)
at org.apache.lucene.queryparser.classic.QueryParser.<init>(QueryParser.java:90)
at com.winfield.HelloLucene.searcher(HelloLucene.java:99)
at com.winfield.test.TestLucene.TestSearch(TestLucene.java:22)
出错原因:
导入了lucene-queryparser-4.10.4.jar 和 lucene-core-5.3.1.jar 版本不一致
解决方案
将lucene-queryparser-4.10.4.jar 更换为 lucene-queryparser-5.3.1.jar
(2)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.
解决方案:
加入属性之后 对流进行重置 tokenStream.reset();
public static void displayToken(String str,Analyzer a){
try {
TokenStream tokenStream = a.tokenStream("content", new StringReader(str));
CharTermAttribute cta = tokenStream.addAttribute(CharTermAttribute.class);
<span style="white-space:pre"> </span>tokenStream.reset();
while(tokenStream.incrementToken()){
System.out.print("["+cta+"]");
}
System.out.println("\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}