PhraseQuery
требует наличия всех условий в искомом поле. - Ваш
BooleanQuery
не требует наличия всех условий.
Этоприводит к вопросу о том, в чем разница между вашим PhraseQuery
и:
term1 = new TermQuery(new Term(...));
booleanQuery.add(term1, BooleanClause.Occur.MUST);
term2 = new TermQuery(new Term(...));
booleanQuery.add(term2, BooleanClause.Occur.MUST);
term3 = new TermQuery(new Term(...));
booleanQuery.add(term3, BooleanClause.Occur.MUST);
Разница в том, что PhraseQuery
потребует, чтобы термины были в правильном порядке, в отличие от BooleanQuery
который не будет иметь каких-либо особых требований к заказу.