Lucene: построение запроса из отдельных терминов - PullRequest
3 голосов
/ 21 марта 2011

Я новичок в Lucene, и я хотел бы знать, в чем разница (если есть) между

PhraseQuery.add(Term1)
PhraseQuery.add(Term2)
PhraseQuery.add(Term3)

и

term1 = new TermQuery(new Term(...));
booleanQuery.add(term1, BooleanClause.Occur.SHOULD);    

term2 = new TermQuery(new Term(...));
booleanQuery.add(term2, BooleanClause.Occur.SHOULD);

term3 = new TermQuery(new Term(...));
booleanQuery.add(term3, BooleanClause.Occur.SHOULD);

1 Ответ

3 голосов
/ 21 марта 2011
  • 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 который не будет иметь каких-либо особых требований к заказу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...