Lucene:构建单个术语的查询

时间:2011-03-21 17:42:58

标签: lucene

我是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 个答案:

答案 0 :(得分:3)

  • 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则不需要任何特定的订单要求。