solr多条件查询这里用的是StringBuilder追加的方式,只展示controller层中的关键代码
@Resource
private SolrClient sc;
@RequestMapping("list.do")
public String list(@RequestParam(defaultValue = "") String total1, @RequestParam(defaultValue = "") String total2,@RequestParam(defaultValue = "") String time2, @RequestParam(defaultValue = "") String time1,
@RequestParam(defaultValue = "") String company, @RequestParam(defaultValue = "") String address,
@RequestParam(defaultValue = "") String no, @RequestParam(defaultValue = "2") int number,
@RequestParam(defaultValue = "") String name, String currentPage, Model model)
throws SolrServerException, IOException {
这里传的参数都是String类型的 因为下面要做字符串拼接 即使有int类型的参数也都设置为String类型
// 查询对象
SolrQuery query = new SolrQuery();
StringBuilder sb = new StringBuilder();
if(name.equals("")) {//如果默认是空 ,就赋值给"*",代表全查的意思
name="*";
}
if(no.equals("")) {
no="*";
}
if(address.equals("")) {
address="*";
}
if(company.equals("")) {
company="*";
}
if(time1.equals("")) {
time1="*";
}
if(time2.equals("")) {
time2="*";
}
if(total1.equals("")) {
total1="*";
}
if(total2.equals("")) {
total2="*";
}
追加的时候空格非常重要 ,没有空格会报错
sb.append("name:" + name);
sb.append(" AND no:" + no);
sb.append(" AND address:" + address);
sb.append(" AND company:" + company);
sb.append(" AND dt:[" + time1 + " TO " + time2 + "]");
sb.append(" AND dt:[" + total2 + " TO " + total2 + "]");
query.setQuery(sb.toString());
最后在把"*"变回空格
if (name.equals("*")) {
name = "";
}
if (no.equals("*")) {
no = "";
}
if (address.equals("*")) {
address = "";
}
if (company.equals("*")) {
company = "";
}
if(time1.equals("*")) {
time1="";
}
if(time2.equals("*")) {
time2="";
}
if(total1.equals("*")) {
total1="";
}
if(total2.equals("*")) {
total2="";
}
return "list";
}
如果有不清楚的地方可以给我留言