solr group分组查询

摘要: Solr对结果的分组处理除了facet还可以使用group。Solr的group是根据某一字段对结果分组,将每一组内满足查询的结果按顺序返回。

Group对比Facet

Group和Facet的概念很像,都是用来分组。Facet返回所有相关的结果并允许用户基于facet的目录重新定义结果集。Facet可以对分组数量进行过滤,以及排序,和日期范围,时间范围分组,但是如果你想得到具体的数据,还得需要查询一次或多次。group可以得到分组的组数量,一次请求,可以拿到所有的数据。 
Group和Facet可以结合起来使用,但只能使用facet.fieldfacet.range,还不支持日期date和维度统计pivot faceting.

Group参数

参数类型说明
group布尔值设为true,表示结果需要分组
group.field字符串需要分组的字段,字段类型需要时是StrField或TextField
group.func查询语句可以指定查询函数
group.query查询语句可以指定查询语句
rows整数返回多少组结果,默认10
start整数指定结果开始位置/偏移量
group.limit整数每组返回多数条结果,默认1
group.offset整数指定每组结果开始位置/偏移量
sort排序算法控制各个组的返回顺序
group.sort排序算法控制每一分组内部的顺序
group.formatgrouped/simple设置为simple可以使得结果以单一列表形式返回
group.main布尔值设为true时,结果将主要由第一个字段的分组命令决定
group.ngroups布尔值设为true时,Solr将返回分组数量,默认fasle
group.truncate布尔值设为true时,facet数量将基于group分组中匹相关性高的文档,默认fasle
group.cache.percent整数0-100设为大于0时,表示缓存结果,默认为0。该项对于布尔查询,通配符查询,模糊查询有改善,却会减慢普通词查询。

 

Solrj检索代码:

        SolrServer server = this.getSolrServer();
        SolrQuery param = new SolrQuery();
        param.setQuery(QUERY_CONTENT);
        param.setRows(QUERY_ROWS);
        param.setParam(GroupParams.GROUP, GROUP);
        param.setParam(GroupParams.GROUP_FIELD, GROUP_FIELD);
        param.setParam(GroupParams.GROUP_LIMIT, GROUP_LIMIT);
        QueryResponse response = null;
        try {
            response = server.query(param);
        } catch (SolrServerException e) {
            logger.error(e.getMessage(), e);
        }
        Map<String, Integer> info = new HashMap<String, Integer>();
        GroupResponse groupResponse = response.getGroupResponse();
        if(groupResponse != null) {
            List<GroupCommand> groupList = groupResponse.getValues();
            for(GroupCommand groupCommand : groupList) {
                List<Group> groups = groupCommand.getValues();
                for(Group group : groups) {
                    info.put(group.getGroupValue(), (int)group.getResult().getNumFound());
                }
            }
        }

 

转载于:https://www.cnblogs.com/powerwu/articles/9987023.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值