solr group by 的用法

   sql里group by 在很多场景下都有使用,那么solr(lucene)怎么用呢?

1.控制台如何通过设置参数实现 .

如下图,如果查询name=xx的返回结果按city分组,如下设置即可。

2.solrj如何用代码实现

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)。

参数是这样:


相关阅读
评论:
点击刷新

↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑