从Lucene的查询中提取术语

时间:2012-08-28 20:49:40

标签: lucene

我正在尝试使用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()电话。

我接下来应该尝试什么?

基因

1 个答案:

答案 0 :(得分:2)

你丢弃query.rewrite的结果