Lucene:构建单个术语的查询

Lucene:构建单个术语的查询,lucene,Lucene,我是Lucene的新手,我想知道他们之间的区别(如果有的话) 及 PhraseQuery要求要搜索的字段中存在所有术语 您的BooleanQuery不要求所有术语都存在 这就引出了一个问题,即您的短语查询与: term1 = new TermQuery(new Term(...)); booleanQuery.add(term1, BooleanClause.Occur.MUST); term2 = new TermQuery(new Term(...)); booleanQuer

我是Lucene的新手,我想知道他们之间的区别(如果有的话)

  • PhraseQuery
    要求要搜索的字段中存在所有术语
  • 您的
    BooleanQuery
    不要求所有术语都存在
这就引出了一个问题,即您的
短语查询
与:

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
没有任何特定的顺序要求。

因此,粗略地说,PhraseQuery中的每个术语都有MUST属性,并且顺序是固定的。那么我肯定会选择BooleanQuery。字符串解析(为了向booleanQuery添加术语)怎么样?我应该手动还是可以使用Lucene?thanks@Patrick您可以使用Lucene解析输入文本,方法是利用现有的分析器之一或编写自己的分析器。一般来说,您应该使用相同的分析器来构建索引和构造查询。
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);
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);