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

Luk*_*ell 5 lucene operators

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

不幸的是,在一个地方代码使用MultiFieldQueryParser,并调用静态"parse"方法(使用String,String [],BooleanClause.Occur [],Analyzer),因此似乎setDefaultOperator无法帮助,因为它是一个实例方法.

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

Ada*_*ter 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]);
    }
}
Run Code Online (Sandbox Code Playgroud)