我们在实际使用lucene的过程中,筛选多个条件时BooleanQuery这个类来实现,比如下面代码:
代码语言:javascript复制 BooleanQuery.Builder bqBuilder = new BooleanQuery.Builder();
if(!StringUtils.isEmpty(name)){
SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer();//中文
QueryParser parser=new QueryParser("name", analyzer);
Query query = parser.parse(name);
bqBuilder.add(query,Occur.MUST);
}
if(!StringUtils.isEmpty(provId)){
bqBuilder.add(new TermQuery(new Term("provinceId",provId)), Occur.MUST);
}
if(!StringUtils.isEmpty(cityId)){
bqBuilder.add(new TermQuery(new Term("cityId",cityId)), Occur.MUST);
}
if(!StringUtils.isEmpty(unionNumber)){
bqBuilder.add(new TermQuery(new Term("unionNumber",unionNumber)), Occur.MUST);
}
if(!StringUtils.isEmpty(bankType)){
bqBuilder.add(new TermQuery(new Term("bankType",bankType)), Occur.MUST);
}
if(CollectionUtils.isEmpty(bqBuilder.build().clauses())){
bqBuilder.add(new WildcardQuery(new Term("name","*")),BooleanClause.Occur.SHOULD);
}
BooleanQuery bQuery = bqBuilder.build();
但是如果上面条件均为空且没有上面标红部分的话查询到的文档为空,而不是所有文档!
对的,笔者在筛选条件为空的情况下使用了WildcardQuery这个类来实现返回所有文档!