Как изменить соединение по умолчанию с Lucene MultiFieldQueryParser - PullRequest
5 голосов
/ 10 июня 2009

У меня есть некоторый код, использующий Lucene, который оставляет оператор соединения по умолчанию как OR, и я хочу изменить его на AND. Часть кода просто использует простой QueryParser, и это нормально - я могу просто вызвать setDefaultOperator в этих случаях.

К сожалению, в одном месте код использует MultiFieldQueryParser и вызывает статический метод parse (принимает String, String [], BooleanClause.Occur [], Analyzer), поэтому кажется, что setDefaultOperator не может помочь, потому что это метод экземпляра.

Есть ли способ продолжать использовать тот же парсер, но изменили соединение по умолчанию?

1 Ответ

8 голосов
/ 10 июня 2009

Класс 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]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...