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