SolrQuery query = new SolrQuery(); query.set("q", "name:\""+name+"\""); query.setStart(0); query.setRows(2000); query.setFields("id,name,city"); query.setParam(GroupParams.GROUP, true); query.setParam(GroupParams.GROUP_FIELD, "city"); QueryResponse rsp = server.query(query); GroupResponse grsp=rsp.getGroupResponse(); List<GroupCommand> lgc=grsp.getValues(); if(lgc!=null&&lgc.size()>0){ if(lgc.size()!=1){ return null; }else{ GroupCommand gc=lgc.get(0); List<Group> groupVals=gc.getValues(); for(int i=0;i<groupVals.size();i++){ Group group=groupVals.get(i); //取出每个城市有多少个 // retMap.put(group.getGroupValue(), group.getResult().getNumFound()); } } }
这个功能有些弱,比如我想查一下按某字段分组后,数量最多的是那几个值。用这个就比较麻烦了,把所有的都查出来再排序,这数据量太大了。
类似上面group by field order by count(*) desc的这种需求,可以用facet来实现。如下图:
这个结果表明,facet.query是指定两区间,group后排序。
facet.field是指定一个字段,group后排序。
排序方式都是倒排(desc)。
参数是这样:
软件下载 - 联系邮箱 - 关注微博
Copyright © 2010-2025 匠艺软件 蜀ICP备19010796号