我有一些代码使用Lucene将默认连接运算符保留为OR,我想将其更改为AND。有些代码只使用了一个简单的QueryParser,这很好 - 我可以在这些实例上调用setDefaultOperator。
不幸的是,在一个地方代码使用MultiFieldQueryParser,并调用静态“parse”方法(采用String,String [],BooleanClause.Occur [],Analyzer),所以看起来setDefaultOperator无法帮助,因为这是一个实例方法。
有没有办法继续使用相同的解析器,但默认的连接是否已更改?
答案 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]);
}
}