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()
失敗するのは呼び出しだけです。
次に何を試せばいいですか?
遺伝子