如何使用Lucene MultiFieldQueryParser更改默认连接

时间:2009-06-10 18:31:26

标签: lucene operators

我有一些代码使用Lucene将默认连接运算符保留为OR,我想将其更改为AND。有些代码只使用了一个简单的QueryParser,这很好 - 我可以在这些实例上调用setDefaultOperator。

不幸的是,在一个地方代码使用MultiFieldQueryParser,并调用静态“parse”方法(采用String,String [],BooleanClause.Occur [],Analyzer),所以看起来setDefaultOperator无法帮助,因为这是一个实例方法。

有没有办法继续使用相同的解析器,但默认的连接是否已更改?

1 个答案:

答案 0 :(得分:8)

MultiFieldQueryParser类扩展了QueryParser类。也许您可以简单地配置此类的实例而不是依赖其静态方法?如果您确实需要配置BooleanClause.Occur值,则可以在以后执行此操作。

String queryString = ...;
String[] fields = ...;
Analyzer analyzer = ...;

MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, analyzer);
queryParser.setDefaultOperator(QueryParser.Operator.AND);

Query query = queryParser.parse(queryString);

// If you're not happy with MultiFieldQueryParser's default Occur (SHOULD), you can re-configure it afterward:
if (query instanceof BooleanQuery) {
    BooleanClause.Occur[] flags = ...;
    BooleanQuery booleanQuery = (BooleanQuery) query;
    BooleanClause[] clauses = booleanQuery.getClauses();
    for (int i = 0; i < clauses.length; i++) {
        clauses[i].setOccur(flags[i]);
    }
}