0

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()失敗するのは呼び出しだけです。

次に何を試せばいいですか?

遺伝子

4

1 に答える 1

2

query.rewrite の結果を破棄します

于 2012-08-29T01:20:49.853 に答える