我正在尝试使用 Lucene 3.0.3 从用户指定的查询中提取术语。我的代码如下所示:
protected Set<Term> getTerms(IndexSearcher searcher, Analyzer analyzer, String field, String queryString, boolean countOnly) {
Set<Term> results = null;
try {
logger.trace( "Creating parser and analyzer" );
QueryParser qp = new QueryParser(Version.LUCENE_30, field, analyzer );
logger.trace( "Constructing query" );
Query query = qp.parse(queryString);
query.rewrite(searcher.getIndexReader());
logger.trace( "Evaluating query: [" + query.toString() + "]");
terms = new HashSet<Term>();
query.extractTerms( terms );
} catch(UnsupportedOperationException uoex) {
logger.error("Error parsing query: " + e.getMessage() );
} catch (ParseException e) {
logger.error( "Error parsing query: " + e.getMessage() );
} catch (IOException e) {
logger.error( "IO Exception in processing query", e);
}
return terms;
}
除非查询文本中有(例如)问号,否则这很好用。如果发生这种情况,该query.extractTerms(terms);
行将抛出一个UnsupportedOperationException
. 这是在我添加query.rewrite()
应该防止此错误的调用之前发生的。不幸的是,错误仍然发生。有趣的是,查询被解析和执行(以不同的方法)就好了;这只是extractTerms()
失败的呼叫。
接下来我应该尝试什么?
基因