2012-08-28 82 views
0

我想從使用Lucene 3.0.3的用戶指定的查詢中提取術語。我的代碼如下所示:從Lucene的查詢中提取術語

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()調用失敗。

我應該嘗試下?

基因

回答

1

你放棄query.rewrite

的結果